Problema com composite-element(hibernate) em relação tern

0 respostas
D

Oli,

Alguém poderia me dar uma força com o seguinte problema:

Tenho três tbls nod bd uma chamada elemento, outra atributos
e uma chamada opcoes_conteudos. Daí existe uma relação ternária entre elas
que gera a tbl OPS_SUBATR_ATR.

Tenho as seguintes classes:

public class AtributoProduto{     
      private Long id;
      private String descricao;    
     private Set opcao = new HashSet();
     private Set elementoNcm = new HashSet();
 	...
 
 public class Opcao {
       private Long id;
      private String descricao;
     private String nmOpcao;
     private Set atributos  = new HashSet();
 	...
 
 public class ElementoNcm {
      private TipoElementoNcm tipoElementoNcm;
      private String descricao;
      private Long id;
 	...

e

public class OpsSubAtrAtr {    
     private AtributoProduto atributo;  
     private ElementoNcm elementoNcm;
     private Opcao opcao;
 
 	...

e estou fazendo o seguinte mapeamento

<?xml version="1.0" encoding="UTF-8"?>
 
 <!DOCTYPE hibernate-mapping PUBLIC
     "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping>    
     <class name="AtributoProduto" table="ATRIBUTOS">
    
         <id name="id" column="ATBS_NR_SQ" type="java.lang.Long" >
             <generator class="native"/>  
         </id>
 
         <property name="descricao" type="java.lang.String" update="true"
         	insert="true" column="ATBS_TX_DESCRICAO"length="300"not-null="true"/>
            
         
         <set name="opcao" lazy="true" table="OPS_SUBATR_ATR"  >
             <key column="OPSA_SUAT_NR_SQ"/>
             <composite-element class="OpsSubAtrAtr" >      
                 <parent name="atributo"/>
                 <many-to-one name="opcao" class="Opcao"
                     column="OPSA_OPCO_NR_SQ" not-null="true">                             
                 </many-to-one>
                  <many-to-one name="elementoNcm" class="ElementoNcm"
                     column="OPSA_ELNC_NR_SQ" not-null="true">                             
                 </many-to-one> 
                 
             </composite-element>
         </set> 
     </class>
 </hibernate-mapping>

Daí tento fazer uma inserção na relação assim:

ElementoNcm ncm = (ElementoNcm) session.get(ElementoNcm.class, new Long(1));
         AtributoProduto atributo = (AtributoProduto) session.get(AtributoProduto.class, new Long(1));
         Opcao opc = (Opcao)session.get(Opcao.class, new Long(1));
         
         atributo.getElementoNcm().add(ncm); 
         atributo.getOpcao().add(opc);
         atributo.setDescricao("Descricao teste");        
     
         try{
              session.save(atributo); 
             session.flush();
             tx.commit();
             session.close();
         } catch(Exception ex){
             ex.printStackTrace();
         }

e a seguinte exception é me apresentada:

ibernate: /* load collection AtributoProduto.opcao */ select opcao0_.OPSA_SUAT_NR_SQ as OPSA1_0_, opcao0_.OPSA_OPCO_NR_SQ as OPSA2_0_, opcao0_.OPSA_ELNC_NR_SQ as OPSA3_0_ from OPS_SUBATR_ATR opcao0_ where opcao0_.OPSA_SUAT_NR_SQ=?
 Hibernate: /* insert collection row AtributoProduto.opcao */ insert into OPS_SUBATR_ATR (OPSA_SUAT_NR_SQ, OPSA_OPCO_NR_SQ, OPSA_ELNC_NR_SQ) values (?, ?, ?)
 (def.AbstractFlushingEventListener   299 ) Could not synchronize database state with session
 org.hibernate.PropertyAccessException: exception getting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) getter of OpsSubAtrAtr.?
 org.hibernate.PropertyAccessException: exception getting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) getter of OpsSubAtrAtr.?
         at org.hibernate.tuple.PojoComponentTuplizer.getPropertyValues(PojoComponentTuplizer.java:79)
         at org.hibernate.tuple.PojoComponentTuplizer.getPropertyValues(PojoComponentTuplizer.java:79)
         at org.hibernate.type.ComponentType.getPropertyValues(ComponentType.java:307)
         at org.hibernate.type.ComponentType.getPropertyValues(ComponentType.java:307)
         at org.hibernate.type.ComponentType.nullSafeGetValues(ComponentType.java:280)
         at org.hibernate.type.ComponentType.nullSafeGetValues(ComponentType.java:280)
         at org.hibernate.type.ComponentType.nullSafeSet(ComponentType.java:251)
         at org.hibernate.type.ComponentType.nullSafeSet(ComponentType.java:251)
         at org.hibernate.persister.collection.AbstractCollectionPersister.writeElement(AbstractCollectionPersister.java:697)
         at org.hibernate.persister.collection.AbstractCollectionPersister.writeElement(AbstractCollectionPersister.java:697)
         at org.hibernate.persister.collection.AbstractCollectionPersister.insertRows(AbstractCollectionPersister.java:1200)
         at org.hibernate.persister.collection.AbstractCollectionPersister.insertRows(AbstractCollectionPersister.java:1200)
         at org.hibernate.action.CollectionUpdateAction.execute(CollectionUpdateAction.java:56)
         at org.hibernate.action.CollectionUpdateAction.execute(CollectionUpdateAction.java:56)
         at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:243)
         at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:243)
         at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:227)
         at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:227)
         at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:143)
         at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:143)
         at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:296)
         at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:296)
         at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
         at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
         at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1009)
         at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1009)
         at hMain.main(Main.java:80)
         at Main.main(Main.java:80)
 Caused by: java.lang.ClassCastException
 Caused by: java.lang.ClassCastException
         at OpsSubAtrAtr$$BulkBeanByCGLIB$$f416b45a.getPropertyValues(<generated>)
         at OpsSubAtrAtr$$BulkBeanByCGLIB$$f416b45a.getPropertyValues(<generated>)
         at net.sf.cglib.beans.BulkBean.getPropertyValues(BulkBean.java:48)
         at net.sf.cglib.beans.BulkBean.getPropertyValues(BulkBean.java:48)
         at org.hibernate.tuple.PojoComponentTuplizer.getPropertyValues(PojoComponentTuplizer.java:76)
         at org.hibernate.tuple.PojoComponentTuplizer.getPropertyValues(PojoComponentTuplizer.java:76)

alguém tem alguma sugestão?

obs: as consultas de opc e elementoNcm estão rolando na boa

Criado 29 de março de 2006
Respostas 0
Participantes 1