Bonjour,
J'ai ce type d'erreur "Found shared references to a collection" que j'arrive pas à le reproduire facilement : je pense que j'ai un prob avec mes fichiers de mapping et notament ceux avec des clés coposées. Je compte sur votre aide et vos conseils.
Amicalement.
Hibernate version:3
Mapping documents: <class name="com.report.persistence.pojos.Docu15" table="_DOCU15" >
<id name="codeExp" type="java.lang.Integer" column="CODE_EXP" > <generator class="assigned" /> </id>
<property name="dtEnvoi" type="java.util.Date" column="DT_ENVOI" length="7" /> <property name="qtEnvoi" type="java.lang.Integer" column="QT_ENVOI" length="4" /> <property name="nbColis" type="java.lang.Integer" column="NB_COLIS" length="4" /> <property name="dtRecept" type="java.util.Date" column="DT_RECEPT" length="7" /> <property name="qtRecu" type="java.lang.Integer" column="QT_RECU" length="4" /> <property name="nomDest" type="java.lang.String" column="NOM_DEST" length="60" /> <property name="adresse" type="java.lang.String" column="ADRESSE" length="60" />
<!-- Associations --> <!-- bi-directional one-to-many association to Ref --> <set name="Refs" lazy="true" inverse="true" cascade="all" > <key> <column name="CODE_EXP" /> </key> <one-to-many class="com.report.persistence.pojos.Ref" /> </set> <!-- bi-directional one-to-many association to Bord --> <set name="Bords" lazy="true" inverse="true" cascade="all" > <key> <column name="CODE_EXP" /> </key> <one-to-many class="com.report.persistence.pojos.Bord" /> </set> <!-- bi-directional many-to-one association to LbTypeExp --> <many-to-one name="lbTypeExp" class="com.report.persistence.pojos.LbTypeExp" not-null="true" > <column name="CODE_TYPEX" /> </many-to-one> <!-- bi-directional many-to-one association to LbTransport --> <many-to-one name="lbTransport" class="com.report.persistence.pojos.LbTransport" not-null="true" > <column name="CODE_TRANSP" /> </many-to-one>
</class>
<class name="com.report.persistence.pojos.Bord" table="_BORD" >
<composite-id> <key-property name="bord" column="BORD" type="java.lang.String" /> <key-many-to-one name="Docu15" class="com.report.persistence.pojos.Docu15" column="CODE_EXP" /> </composite-id>
</class>
<class name="com.report.persistence.pojos.Ref" table="_REF" >
<composite-id> <key-property name="ref" column="REF" type="java.lang.String" /> <key-many-to-one name="Docu15" class="com.report.persistence.pojos.Docu15" column="CODE_EXP" /> </composite-id>
</class>
<class name="com.report.persistence.pojos.LbTransport" table="LB_TRANSPORT" >
<id name="codeTransp" type="java.lang.Integer" column="CODE_TRANSP" > <generator class="assigned" /> </id>
<property name="transport" type="java.lang.String" column="TRANSPORT" not-null="true" length="30" />
<!-- Associations --> <!-- bi-directional one-to-many association to Docu15 --> <set name="Docu15s" lazy="true" inverse="true" cascade="all" > <key> <column name="CODE_TRANSP" /> </key> <one-to-many class="com.report.persistence.pojos.Docu15" /> </set>
</class>
<class name="com.report.persistence.pojos.LbTypeExp" table="LB_TYPE_EXP" >
<id name="codeTypex" type="java.lang.Integer" column="CODE_TYPEX" > <generator class="assigned" /> </id>
<property name="typeExp" type="java.lang.String" column="TYPE_EXP" not-null="true" length="50" />
<!-- Associations --> <!-- bi-directional one-to-many association to Docu15 --> <set name="Docu15s" lazy="true" inverse="true" cascade="all" > <key> <column name="CODE_TYPEX" /> </key> <one-to-many class="com.report.persistence.pojos.Docu15" /> </set>
</class>
Code between sessionFactory.openSession() and session.close():
list = myHibernateSession.createCriteria(Docu15.class,"docu15") .add(Expression.between("dtEnvoi", fDate, lDate)) .createCriteria("docu15.lbTypeExp") .add(Expression.eq("typeExp", typeExp)) .list();
g implémenté mes fonctions equals et hashCode comme suit :
public class Bord implements Serializable {
/** * */ private static final long serialVersionUID = -3682503328782882534L; /** identifier field */ private String bord;
/** persistent field */ private Docu15 Docu15;
/** full constructor */ public Bord(String bord, Docu15 Docu15) { this.bord = bord; this.Docu15 = Docu15; }
/** default constructor */ public Bord() { }
public String getBord() { return this.bord; }
public void setBord(String bord) { this.bord = bord; }
public Docu15 getDocu15() { return this.Docu15; }
public void setDocu15(Docu15 Docu15) { this.Docu15 = Docu15; }
public String toString() { return new ToStringBuilder(this) .append("bord", getBord()) .append("Docu15", getDocu15().getCodeExp()) .toString(); }
public boolean equals(Object other) { if (other == null) return false; if (! (other instanceof Bord)) return false; Bord that = (Bord) other; if (this.getDocu15() != null && that.getDocu15() != null) { if (! this.getDocu15().equals(that.getDocu15())) { return false; } } if (this.getBord() != null && that.getBord() != null) { if (! this.getBord().equals(that.getBord())) { return false; } } return true; }
public int hashCode() { return new HashCodeBuilder().append(getBord()) .append(getDocu15().hashCode()) .toHashCode(); }
Full stack trace of any exception that occurs:
com.commons.exceptions.PersistenceManagerException: org.hibernate.HibernateException: Found shared references to a collection at com.report.persistence.managers.Docu15PersistenceManagerImpl.findByDtEnvoiAndTypeExp(Docu15PersistenceManagerImpl.java:72) at com.report.web.businessLayer.EnvoiCODRBL.getCouponsODRByMonth(EnvoiCODRBL.java:134) at com.report.web.actions.EnvoiCODRAction.execute(EnvoiCODRAction.java:59) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at com.commons.filter.HibernateFilter.doFilter(HibernateFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Unknown Source) Caused by: org.hibernate.HibernateException: Found shared references to a collection at org.hibernate.engine.Collections.processReachableCollection(Collections.java:130) at org.hibernate.event.def.FlushVisitor.processCollection(FlushVisitor.java:37) at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:104) at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:64) at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:58) at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:198) at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:190) at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:70) at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:39) at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:711) at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1315) at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:300) at org.hibernate.impl.CriteriaImpl$Subcriteria.list(CriteriaImpl.java:142) at
|