Por favor, comentem!
Gostaria de mapear o seguinte relacionamento usando JPA,
Como podem ver, empresa e funcionário possuem um fk para endereco,
preciso que, ao adicionar um novo funcionário ou empresa, um registro na tabela endereco seja criado e que a
fk da tabela empresa ou endereco aponte para esse endereco.
public class Empresa{
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "ID_EMPRESA")
private Endereco endereco = new Endereco();
}
public class Endereco{
@Column(nullable = false, length = 45)
private String bairro;
@Column(nullable = false, length = 8)
private String CEP;
@Column(nullable = false, length = 45)
private String cidade;
@Column(nullable = false, length = 45)
private String complemento;
@Enumerated(EnumType.STRING)
@Column(nullable = false)
private EstadoEnum estado;
@Id
@Column(name = "ID_ENDERECO")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}
da forma como esta mapedo, o hibernate primeiro tenta incluir a empresa para depois incluir o endereço,
por conta disso recebo o seguinte erro na tabela empresa,
10:22:38,288 ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception
java.sql.SQLException: Field 'ID_ENDERECO' doesn't have a default value
Preciso que o hibernate inclua primeiro o endereco e depois a empresa.
O problema era de escrita,
Errado:
public class Empresa{
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "ID_EMPRESA")
private Endereco endereco = new Endereco();
}
Correto:
public class Empresa{
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "ID_ENDERCO")
private Endereco endereco = new Endereco();
}