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

0 respostas
rocha

Olá,

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