Fala ae pessoal, beleza?
É o seguinte, estudando e fazendo alguns testes com a JPA2 esbarrei em uma dificuldade em persistir os dados em Mapeamentos Circulares, entre as anotações de @ManyToOne <-> @OneToMany.
Por exemplo. Classe Pessoa possui um relacionamento com a Classe Familia, onde a Pessoa possui UMA Família, e a Família possui N Pessoas. Mas a Família também possui UMA Pessoa que é a Chefe da Família.
Assim:
public class Pessoa {
@Id @GeneratedValue
private Long id;
@Column(name="flg_chefe_familia", nullable=false)
private boolean flgChefeFamilia;
@ManyToOne(nullable=false)
@JoinColumn(name="familia_id")
private Familia familia;
// métodos get, set e is
}
public class Familia {
@Id @GeneratedValue
private Long id;
@OneToMany(mappedBy="familia")
private List<Pessoa> listaPessoas;
@OneToOne(nullable=false)
@JoinColumn(name="chefe_familia_id")
private Pessoa chefeFamilia;
// métodos get e set
}
Ao registrar uma pessoa vinda do form faço isso (Resumido).
public class RegistrarPessoa(Pessoa pessoa) {
Familia familia = new Familia();
familia.setListaPessoas(new ArrayLis<Pessoa>());
familia.getListaPessoas().add(pessoa);
if(pessoa.isFlgChefeFamilia()) {
familia.setChefeFamilia(pessoa);
}
pessoa.setFamilia(familia);
new PessoaDao().inserir(pessoa); // será executado EntityManager.persist()
new FamiliaDao().inserir(familia); // será executado EntityManager.persist()
}
Quando tento registrar primeiro o objeto Família a JPA reclama do chefeFamilia. Quando tento registrar primeiro o objeto Pessoa a JPA reclama da Família.
Como eu conseguiria resolver isso?
Agradeço já antecipadamente.
Abraço…