Pessoal estou enfrentando um problema bem sério. Estou utilizando o Hibernate + Struts + Tomcat para uma aplicação web. Apesar de seguir com cuidado todas as recomendações do Hibernate Reference Documentation Version: 2.1.6, não estou conseguindo recuperar as informações do BD, para um mapeamento.
O mapeamento é um relacionamento de uma classe para ela mesma (Parent/Child), a gravação acontece com perfeição, respeitando corretamente a hierarquia dos objetos, mas para recuperar os dados, somente o objeto de nível mais alto é recuperado.
Listagem 1 - PersonChain.hbm.xml
<hibernate-mapping default-cascade="all">
<class name="br.com.cccp.personchain.PersonChain" table="personchain">
<id name="id" type="string" unsaved-value="null">
<column name="id" sql-type="char(32)" not-null="true"/>
<generator class="uuid.hex"/>
</id>
<set name="dependents" lazy="true" inverse="true">
<key column="master" />
<one-to-many class="br.com.cccp.personchain.PersonChain" />
</set>
<many-to-one name="owner" column="master" class="br.com.cccp.personchain.PersonChain" />
<property name="code" column="code" type="string" />
<property name="nameCompany" column="name_company" type="string" />
<property name="nameFantasy" column="name_fantasy" type="string" />
<property name="cpfCnpj" column="cpf_cnpj" type="string" />
<property name="ie" column="ie" type="string" />
</class>
</hibernate-mapping>
Listagem 2 - Trecho do Servlet Action para recuperação
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
String code = (String) request.getParameter("code");
PersonChain person = null;
Query query = session.createQuery("from PersonChain where code = :code");
query.setString("code", code);
Iterator persons = query.iterate();
if(persons.hasNext()) {
person = (PersonChain) persons.next();
}
request.setAttribute("personchain", person);
tx.commit();
HibernateUtil.closeSession();
return mapping.findForward("success");
Listagem 3 - Classe br.com.cccp.personchain.PersonChain
public class PersonChain {
private String id;
private String code;
private String nameCompany;
private String nameFantasy;
private String ie;
private String cpfCnpj;
private Set dependents = new HashSet();
private PersonChain owner = null;
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public PersonChain getOwner() {
return this.owner;
}
public void setOwner(PersonChain owner) {
this.owner = owner;
if(this.owner != null) {
this.owner.getDependents().add(this);
}
}
public void addDependent(PersonChain dependent) {
if(dependent != null) {
dependent.setOwner(this);
}
}
public Set getDependents() {
return this.dependents;
}
public void setDependents(Set dependents) {
this.dependents = dependents;
}
....
getters e setter (sem maior importância)
....
}
Bem, acredito que coloquei todas as informações para uma análise mais coerente, agradeço por qualquer ajuda.
Obrigado!