Pessoal, como faço para mapear um atributo que é do tipo da própria classe?
Por exemplo… tenho uma tabela de setores, onde cada setor pode (ou não) possuir um setor superior. (No banco é uma chave extrangeira para a mesma tabela).
Minha classe Setor está assim:
package br.com.progov.intranetlibrary.entidade;
@Entity
@Table(name="int_setores")
public class Setor {
private Integer codigoSetor;
private String controle;
private String descricao;
private char ultimoNivel = 's';
private SetorNivel codigoSetorNivel;
private Setor setorSuperior;
public Setor() {
}
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
public Integer getCodigoSetor() {
return codigoSetor;
}
public void setCodigoSetor(Integer codigo) {
this.codigoSetor = codigo;
}
public String getControle() {
return controle;
}
public void setControle(String controle) {
this.controle = controle;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public char getUltimoNivel() {
return ultimoNivel;
}
public void setUltimoNivel(char ultimoNivel) {
this.ultimoNivel = ultimoNivel;
}
@ManyToOne
public SetorNivel getCodigoSetorNivel() {
if (codigoSetorNivel == null){
codigoSetorNivel = new SetorNivel();
}
return codigoSetorNivel;
}
public void setCodigoSetorNivel(SetorNivel codigoNivel) {
this.codigoSetorNivel = codigoNivel;
}
@ManyToOne
@JoinColumn(name="codigoSetor", nullable=true)
public Setor getSetorSuperior() {
return setorSuperior;
}
public void setSetorSuperior(Setor setorSuperior) {
this.setorSuperior = setorSuperior;
}
}
O problema está no mapeamento do setor superior:
@ManyToOne
@JoinColumn(name=“codigoSetor”, nullable=true)
public Setor getSetorSuperior() {
return setorSuperior;
}
Está apresentando o erro:
[b]
Exception in thread “main” java.lang.ExceptionInInitializerError
at br.com.progov.hibernate.HibernateUtil.(HibernateUtil.java:31)
at br.com.progov.dao.hibernateimpl.GenericoDAOHibernateImpl.selectById(GenericoDAOHibernateImpl.java:80)
at testes.SetorPersistencia.main(SetorPersistencia.java:15)
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: br.com.progov.intranetlibrary.entidade.Setor column: codigoSetor (should be mapped with insert=“false” update=“false”)
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:605)
at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:627)
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:645)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:420)
at org.hibernate.mapping.RootClass.validate(RootClass.java:192)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1099)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1284)
at br.com.progov.hibernate.HibernateUtil.(HibernateUtil.java:28)
… 2 more
[/b]
Quando utilizava o .hbm.xml, o mapeamento era assim: