[Hibernate + JBoss] StackOverflow

E aí pessoal,

seguinte comecei a testar o hibernate como um serviço no JBoss… Até aí tudo bem… Tá funcionando…

O problema é que possuo duas tabelas (pai e filho) e uso um composite-id. Quando insiro a classe pai, tudo bem… Quando insiro a filha dizendo quem é a pai, tbm ocorre tudo certo… Entretanto se tento fazer o seguinte:

            FichaTecnica ficha = new FichaTecnica();
            ficha.setDmProdutoForrado("A");
            ficha.setDmTipoFichaTecnica("0");
            ficha.setDtCadastro(Calendar.getInstance().getTime());
            ficha.setNrFichaTecnica(1);
            ficha.setNrVersao(5);
            ficha.setTxObservacao("Hibernate Rulez");
            FtFase fase = new FtFase();
            FtFaseId faseId = new FtFaseId();
            faseId.setIdFtFase(1);
            faseId.setFichaTecnica(ficha);
            fase.setId(faseId);
            HashSet set = new HashSet();
            set.add(fase);
            ficha.setFtFases(set);          	
            session.save(fase);
            session.flush();

Pronto dá erro… Dá StackOverflowError

2003-12-12 16:40:39,340 ERROR [org.jboss.ejb.plugins.LogInterceptor] Unexpected Error:
java.lang.StackOverflowError

Vou postar abaixo os meus mappings:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
   <class name="com.systemhaus.antara.industrial.engenharia.FichaTecnica" table="FICHAS_TECNICAS">
      <id name="idFichaTecnica" column="ID_FICHA_TECNICA" type="integer" unsaved-value="null">
         <generator class="increment"/>
      </id>
      <property name="nrFichaTecnica" column="NR_FICHA_TECNICA" type="integer" length="6" not-null="true"/>
      <property name="nrVersao" column="NR_VERSAO" type="integer" length="3" not-null="true"/>
      <property name="dtCadastro" column="DT_CADASTRO" type="date" not-null="true"/>
      <property name="dmTipoFichaTecnica" column="DM_TIPO_FICHA_TECNICA" type="string" length="1" not-null="true"/>
      <property name="dmProdutoForrado" column="DM_PRODUTO_FORRADO" type="string" length="1" not-null="true"/>
      <property name="txObservacao" column="TX_OBSERVACAO" type="string" length="150"/>
      <set name="ftFases" cascade="all" inverse="true" lazy="true">
         <key column="ID_FICHA_TECNICA"/>
         <one-to-many class="com.systemhaus.antara.industrial.engenharia.FtFase"/>
      </set>
   </class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
   "-//Hibernate/Hibernate Mapping DTD//EN"
   "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
   <class name="com.systemhaus.antara.industrial.engenharia.FtFase" table="FT_FASES">
       <composite-id name="id" class="com.systemhaus.antara.industrial.engenharia.FtFaseId" unsaved-value="any">
          <key-property name="idFtFase" type="integer" column="ID_FT_FASE"/>
          <key-many-to-one name="fichaTecnica" class="com.systemhaus.antara.industrial.engenharia.FichaTecnica" column="ID_FICHA_TECNICA"/>
       </composite-id>
   </class>
</hibernate-mapping>

Alguém já passou por esse problema???

Vallew

cara
vc tem referencias circulares ai, da uma olhada direito:

fase -> ficha TYecnica ->ftfases -> fase !!!

ai ele fica chamando por reflection de um em um, ateh estourar a pilha

E aí Paulo, blz… hehehe olha eu te enchendo de novo!!!

            FichaTecnica ficha = new FichaTecnica(); 
            ficha.setDmProdutoForrado("A"); 
            ficha.setDmTipoFichaTecnica("0"); 
            ficha.setDtCadastro(Calendar.getInstance().getTime()); 
            ficha.setNrFichaTecnica(1); 
            ficha.setNrVersao(5); 
            ficha.setTxObservacao("Hibernate Rulez"); 
            FtFase fase = new FtFase();                                
            FtFaseId faseId = new FtFaseId(); 
            faseId.setIdFtFase(1); 
            faseId.setFichaTecnica(ficha);                             <<<
            fase.setId(faseId);                                             <<<
            HashSet set = new HashSet(); 
            set.add(fase);                                                    <<<
            ficha.setFtFases(set);              
            session.save(fase); 
            session.flush(); 

O q vc disse foi devido a essas linhas marcadas??? Vc disse q está circular pq adiciono a ficha na fase e pq depois eu adiciono a fase na ficha??? O problema é que quando eu não setava a ficha na fase dava erro de se tentar inserir null no banco então achei isso no FAQ do Hibernate:

Que é o q estou fazendo…
Se não foi isso q tu quis dizer, então entendi errado!!!

Valeu!!!