Da uma olhadinha neste, talvez ajude:
package br.com.alura.spring.data.service;
@Service
public class CrudFuncionarioService {
private Boolean system = true;
private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
private final CargoRepository cargoRepository;
private final FuncionarioRepository funcionarioRepository;
private final UnidadeTrabalhoRepository unidadeTrabalhoRepository;
public CrudFuncionarioService(FuncionarioRepository funcionarioRepository,
CargoRepository cargoRepository, UnidadeTrabalhoRepository unidadeTrabalhoRepository) {
this.cargoRepository = cargoRepository;
this.funcionarioRepository = funcionarioRepository;
this.unidadeTrabalhoRepository = unidadeTrabalhoRepository;
}
public void inicial(Scanner scanner) {
while(system) {
System.out.println("Qual acao de funcionario deseja executar");
System.out.println("0 - Sair");
System.out.println("1 - Incluir");
System.out.println("2 - Atualizar");
int action = scanner.nextInt();
switch (action) {
case 1:
salvar(scanner);
break;
case 2:
atualizar(scanner);
break;
default:
system = false;
break;
}
}
}
private void salvar(Scanner scanner) {
System.out.println("Digite o nome");
String nome = scanner.next();
System.out.println("Digite o cpf");
String cpf = scanner.next();
System.out.println("Digite o salario");
Double salario = scanner.nextDouble();
System.out.println("Digite a data de contratacao");
String dataContratacao = scanner.next();
System.out.println("Digite o cargoId");
Integer cargoId = scanner.nextInt();
List<UnidadeTrabalho> unidades = unidade(scanner);
Funcionario funcionario = new Funcionario();
funcionario.setNome(nome);
funcionario.setCpf(cpf);
funcionario.setSalario(salario);
funcionario.setDataContratacao(LocalDate.parse(dataContratacao, formatter));
Optional<Cargo> cargo = cargoRepository.findById(cargoId);
funcionario.setCargo(cargo.get());
funcionario.setUnidadeTrabalhos(unidades);
funcionarioRepository.save(funcionario);
System.out.println("Salvo");
}
private List<UnidadeTrabalho> unidade(Scanner scanner) {
Boolean isTrue = true;
List<UnidadeTrabalho> unidades = new ArrayList<>();
while (isTrue) {
System.out.println("Digite o unidadeId (Para sair digite 0)");
Integer unidadeId = scanner.nextInt();
if(unidadeId != 0) {
Optional<UnidadeTrabalho> unidade = unidadeTrabalhoRepository.findById(unidadeId);
unidades.add(unidade.get());
} else {
isTrue = false;
}
}
return unidades;
}
private void atualizar(Scanner scanner) {
System.out.println("Digite o id");
Integer id = scanner.nextInt();
System.out.println("Digite o nome");
String nome = scanner.next();
System.out.println("Digite o cpf");
String cpf = scanner.next();
System.out.println("Digite o salario");
Double salario = scanner.nextDouble();
System.out.println("Digite a data de contratacao");
String dataContratacao = scanner.next();
System.out.println("Digite o cargoId");
Integer cargoId = scanner.nextInt();
Funcionario funcionario = new Funcionario();
funcionario.setId(id);
funcionario.setNome(nome);
funcionario.setCpf(cpf);
funcionario.setSalario(salario);
funcionario.setDataContratacao(LocalDate.parse(dataContratacao, formatter));
Optional<Cargo> cargo = cargoRepository.findById(cargoId);
funcionario.setCargo(cargo.get());
funcionarioRepository.save(funcionario);
System.out.println("Alterado");
}
}
Precisa cadastrar Cargo e Unidade antes para poder relacionar. No cadastro de Funcionários ao fazer esta relação ele grava na tabela :