Também tive outro problema quando tento salvar um novo funcionário é impossível de adicionar uma unidade a ele
Digite o nome do funcionario
jose
Digite o cpf
9238304
Digite o salario
3000.0
Digite a data de contracao
01/05/2009
Digite o cargoId
1
Digite o unidadeId (Para sair digite 0)
1
Digite o unidadeId (Para sair digite 0)
0
e quando aperto 0 para sair...
java.lang.IllegalStateException: Failed to execute CommandLineRunner ->
Caused by: org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement ->
Caused by: org.hibernate.exception.ConstraintViolationException: could not execute statement ->
Caused by: java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (spring_data_aula
.funcionarios_unidades
, CONSTRAINT FKgn3jpmj1h0hdy8io3beyrc13i
FOREIGN KEY (fk_unidade
) REFERENCES unidade_trabalho
(id
))
Esse problema também aparece tanto no meu código como no do professor. Eu imagino que tenha a ver com a forma que foi configurado o relacionamento entre funcionário porem como o professor não apresentou muito detalhe de como ele definiu os relacionamentos acabei ficando um pouco perdido. (o problema persiste mesmo apagando o banco de dados e começando do zero)
Funcionario
@Entity
@Table(name = "funcionarios")
public class Funcionario {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String nome;
private String cpf;
private Double salario;
private LocalDate dataContratacao;
@ManyToOne
@JoinColumn(name = "cargo_id", nullable = false)
private Cargo cargo;
@Fetch(FetchMode.SELECT)
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "funcionarios_unidades", joinColumns = {
@JoinColumn(name = "fk_funcionario") },
inverseJoinColumns = { @JoinColumn(name = "fk_unidade") })
private List<Unidade> unidades;
Unidade
@Entity
@Table(name = "unidades")
public class Unidade {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String nome;
private String endereco;
@ManyToMany(mappedBy = "unidades", fetch = FetchType.EAGER)
private List<Funcionario> funcionarios;
Eu entendo que são muitas duvidas e que talvez não seja possível responder todas, queria também dizer que nenhum desses problemas me impediu de dar continuidade no curso mas fiquei muito curioso e queria entender o motivo pelo qual eles acontecem (o do scanner principalmente). Aguardo a sua resposta e agradeço desde já.