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:
[code]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;
…
[/code]
e
[code]public class OpsSubAtrAtr {
private AtributoProduto atributo;
private ElementoNcm elementoNcm;
private Opcao opcao;
...
[/code]
e estou fazendo o seguinte mapeamento
[code]<?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>
[/code]
Daí tento fazer uma inserção na relação assim:
[code]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();
}
[/code]
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