Olá Pessoal,
Cenário:
Existe a entidade CadAssociado que representa pessoas, que podem ser Titulares ou Dependentes.
@ManyToOne
@Entity
@Table(name="cad_associado", schema="public")
public class CadAssociado {
// Atributos como Nome, DtNascto, CPF, etc.....
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="id_titular")
private CadAssociado titular;
// getters & setters
}
No modelo acima, apenas uma tabela é criada no banco de dados (cad_associado), e sei se a pessoa é titular ou dependente pela coluna id_titular estar ou não preenchida.
A parte ruim desta modelagem é que se eu estiver com o Objeto do Titular, não tenho acesso prático aos dependentes (Ex: cadAssociado.getDependentes()). Me forcando a fazer uma consulta fora a parte, quando preciso de tal informação.
OK, vamos esquecer então essa coisa de eu informar quem é o Titular do meu cadastro, e vamos passar a ter uma Coleção de Dependentes p/ coisa ficar mais legível e prática.
@OneToMany
@Entity
@Table(name="cad_associado", schema="public")
public class CadAssociado {
// Atributos como Nome, DtNascto, CPF, etc.....
@OneToMany(fetch=FetchType.LAZY)
private Collection<CadAssociado> dependentes;
// getters & setters
}
Bom, até ai tudo bem, temos enfim um CadAssociado, que facilmente pode me dar os Dependentes (cadAssociado.getDependentes()), mas com essa anotação de OneToMany, o nosso amigo Hibernate criou uma segunda tabela, chamada cad_associado_cad_associado, e nesta tabela tem as duas colunas necessarias p/ este relacionamento (cad_associado_id e dependentes_id).
Minhas dúvidas são:
:arrow: Qual a melhor pratica para este caso (@OneToMany ou @ManyToOne)?
:arrow: Se eu realmente optar pela modelagem @OneToMany, tem como dizer p/ Hibernate não criar uma segunda tabela, e usar somente a que já existe, criando uma coluna de dependencia de cadastro, assim como quando mapiei sendo @ManyToOne?
Bom Pessoal, conto com a experiência de todos p/ me ajudar a definir esta situação de cadastro (Mestre/Detalhe).
