Boa tarde, pessoal.
Estou com um problema no mapeamento objeto-relacional de minhas classes que estão tirando o meu sono há varias noites.
Tenho procurado material, mas realmente tenho encontrado pouquissima coisa de onde pode-se retirar algo.
Meu problema é o seguinte… Tenho uma classe que possui um auto-relacionamento. A classe se chama Usuario. Dentro dessa classe, ela possui um atriburo pai, mae e lista de filhos. Todos eles também da classe usuario. Segue a classe:
@Entity
@Table(name="tbl_usuario")
public class Usuario {
@Id
@SequenceGenerator(name = "SEQ", sequenceName = "seq_usuario", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="SEQ")
@Column(name="id_usuario")
private Long id;
@Column(name="nome")
private String nomeCompleto;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="id_pai", referencedColumnName="id_usuario", updatable=true, insertable=true)
private Usuario pai;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="id_mae", referencedColumnName="id_usuario", updatable=true, insertable=true)
private Usuario mae;
@ManyToMany
@JoinTable(name="tbl_filhos", joinColumns=@JoinColumn(name="id_usuario", referencedColumnName="id_usuario"),
inverseJoinColumns=@JoinColumn(name="id_filho", referencedColumnName="id_usuario"))
private List<Usuario> listaDeFilhos = new ArrayList<Usuario>();
//Getters and Setters
Minha primeira dúvida é a seguinte:
>>> Sempre que tento atualizar um usuario a atualização funciona sem problemas, desde que a eu não atualize um objeto Usuario (o atributo pai, mae ou listaDeFilhos).
Quando tento atualizar um destes atributos, ocorre erro. O mapeamento destes tres atributos estao corretos?
E minha outra dúvida é a seguinte: Um filho pode ser adotado. Por causa deste unico atributo, eu tive que criar uma outra tabela no BD e uma classe Filho que extende Usuario. Que tipo de Annotations eu preciso fazer para indicar ao Hibernate que a classe filho é subclasse da classe usuario?