Relacionamento recursivo hibernate annotation

Boa tarde.
Estou fazendo um relacionamento recursivo no hibernate, não dá erro nenhum, consigo salvar, mas meu item não está recuperando os filhos no eager…

Segue abaixo.

	@ManyToOne(fetch = FetchType.EAGER, targetEntity = Item.class)
	@JoinColumn(name = "itemPai")
	private Item itemPai;

	@OneToMany(mappedBy = "itemPai", fetch = FetchType.EAGER, targetEntity = Item.class)
	private Set<Item> filhos = new HashSet<Item>();

Agrad~eço

nothing

Consegui!!!

O problema era a pesquisa e não o mapeamento, o mapeamento está correto.

Usando criteria não vinha

Criteria criteria = super.getSession().createCriteria(Item.class);
criteria.add(Restrictions.isNull("itemPai"));
criteria.setFetchMode("itensFilhos", FetchMode.JOIN);

Agora usando hql veio.

"Select item From Item item where item.itemPai is null"

Só não sei o porque… rsrs

Abraços e espero ter ajudado caso tenha o mesmo problema.

Puxa, estou com um problema semelhante…

Tenho a seguinte estrutura:

interface Item{}
class Elemento implements Item{
  Item itemPai;
}
class Composicao implements Item{

  public List<Item> itens;
  public Item itemPai;
}

Bom… o Hibernate não me deixa mapear isto, mas é a “QUIDIDADE” da minha solução. Preciso ter isto em meu BD.

Ou eu terei que desfazer da “elegancia” em da interface e montar duas listas, uma com elementos e outra com composição, ou terei encontrar uma forma de mapear isto de forma correta.

Tentei fazer uns testes, colocando esta interface como uma superclasse que estende minha superclasse “DomainObject”, mas ele me lança a seguinte exception:


Initial SessionFactory creation failed.org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: br.com.mailanalyzer.analise.Composicao.itens[br.com.mailanalyzer.analise.Item]
Exception in thread "main" java.lang.ExceptionInInitializerError
        at br.com.mailanalyzer.dao.HB.<init>(HB.java:118)
        at br.com.mailanalyzer.dao.HB.getInstancia(HB.java:130)
        at br.com.mailanalyzer.dao.BaseDAO.<init>(BaseDAO.java:35)
        at br.com.mailanalyzer.dao.SinonimosDAO.<init>(SinonimosDAO.java:26)
        at br.com.mailanalyzer.analise.Sinonimo.getInstancia(Sinonimo.java:35)
        at br.com.mailanalyzer.analise.Elemento.setPalavra(Elemento.java:92)
        at br.com.mailanalyzer.analise.Raiz.aprender(Raiz.java:91)
        at br.com.mailanalyzer.analise.Teste.aprenderTudo(Teste.java:21)
        at br.com.mailanalyzer.analise.Teste.main(Teste.java:90)
Caused by: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: br.com.mailanalyzer.analise.Composicao.itens[br.com.mailanalyzer.analise.Item]
        at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1068)
        at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:600)
        at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:541)
        at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:43)
        at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1130)
        at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:324)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1286)
        at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
        at br.com.mailanalyzer.dao.HB.<init>(HB.java:112)
        ... 8 more
Java Result: 1

Já testei de tudo, mas não consigo fazer funcionar.
O itemPai sempre será uma composição, então tentei torná-lo um objeto de composição também, mas nada…

Se eu faço com interface, a exceção é de que meus java beans não estão implementados, e se for com a superclasse, a exceção é esta aí…

Alguma ideia de como posso resolver este problema?

Desde já, obrigado.

Att,

Lucas Israel