[Hibernate] Problemas com auto-relacionamento simples [RESOLVIDO]

3 respostas
lucascaton

Boa noite amigos do GUJ, tudo bom?

Estou tentando mapear um auto-relacionamento (usando Hibernate), mas não está dando certo.

Minha classe está assim:
public class Capitulo {
	private Long idCapitulo;
	private String titulo;
	private Set subCapitulos = new HashSet();
	private Capitulo capituloPai;

//aqui vão: contrutor, setters e getters...
}

O problema é que quando eu tento pegar qualquer objeto do Set "SubCapitulos", o objeto que obtenho é o proprio objeto capitulo.

Meu mapeamento está assim:
<hibernate-mapping>
	<class name="model.Capitulo" table="capitulo">

        	<id name="idCapitulo"><generator class="native"/></id>
		<property name="titulo"/>


		<set name="subCapitulos" table="capitulo" lazy="true" cascade="all">
			<key column="idCapitulo" foreign-key="FK_idCapituloPai"/>
			<one-to-many class="model.Capitulo"/>
		</set>

		<many-to-one class="model.Capitulo" name="capituloPai" column="capituloPai" foreign-key="FK_idCapituloPai" not-null="false"/>


	</class>
</hibernate-mapping>

Fazendo o seguinte teste:

[pagina_teste.jsp]
Session sessao = HibernateUtil.getSessionFactory().getCurrentSession();
sessao.beginTransaction();

Capitulo capitulo = (Capitulo) sessao.load(Capitulo.class, (long) 1);
Iterator it = capitulo.getSubCapitulos().iterator();
while (it.hasNext()) {
	Capitulo subCapitulo = (Capitulo) it.next();
	out.print(capitulo.equals(subCapitulo));
}
O resultado dessa JSP é:
true

Alguém sabe o que está errado?

Obrigado.
Lucas Catón.

3 Respostas

D

Já experimentou trocar:

por

lucascaton

Hum… minha tabela agora ficou assim:

Ele criu uma coluna “FK_idCapituloPai”, acho que não era pra acontecer isso, era?!

Pra testar, eu inclui um subcapitulo (2º registro da tabela acima), porém, usando o método capitulo.getSubCapitulos, retornou um Set vazio… :frowning:

lucascaton

Pessoal, resolvi o problema.

Eu simplesmente retirei da tag “key” a propriedade foreign-key.

Ou seja, alterei de:

Para:

Logo, o Set inteiro ficou assim:

<set name="subCapitulos" table="capitulo" lazy="true" cascade="all"> <key column="capituloPai"/> <one-to-many class="model.Capitulo"/> </set>

Obrigados especiais ao Domingos Neto, que me ajudou.
Até a próxima. Abraços.

Criado 5 de agosto de 2008
Ultima resposta 7 de ago. de 2008
Respostas 3
Participantes 2