Neste artigo vou mostrar um exemplo de um relacionamento bidirecional recursivo, ou seja, o objeto faz referência a ele mesmo.
As vezes ao invés de usar herança, essa solução resolve de forma mais simples não tendo que alterar muita coisa no modelo já existente. Recentemente usei ela para o desdobramento de uma entidade que era a base do sistema e foi reclassificado em elementos "pai e filho".
Claro que houve a necessidade de aumentar alguns campos na tabela que serão usados apenas quando for "filho" ou "pai", mas a desnormalização do modelo muitas vezes se faz necessário. O uso de outra solução acarretaria em uma grande mudança em todo o sistema.
Para o exemplo vamos pensar para fins didáticos em uma cadeia de comando onde um Chefe tem Subordinados, mas também está subordinado à um Chefe.
No
banco existem os seguintes campos: id, nome e chefe_superior_id. Segue
o código:
import javax.persistence.*;
import java.util.List;
@Entity
@Table(name
= "chefe")
public
class Chefe {
@Id
@GeneratedValue(strategy =
GenerationType.IDENTITY)
private Long id;
@Column(name = "nome")
private String nome;
@OneToMany(mappedBy = "chefe",
cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<Chefe> subordinados;
@ManyToOne
@JoinColumn(name = "chefe_superior_id")
private Chefe chefe;
// getters e setters
}
Nenhum comentário:
Postar um comentário