[
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1820?page=c...
]
srs commented on HHH-1820:
--------------------------
I can confirm that we get the same LazyInitializationException on many-to-many relations
with propery-ref's when using lazy loading on MySQL 5.x and Hibernate 3.1.2.
Lazy loading problem when property-ref is used for collections
--------------------------------------------------------------
Key: HHH-1820
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1820
Project: Hibernate3
Issue Type: Bug
Affects Versions: 3.1.3
Environment: Oracle 8.1.7
Reporter: Jakub Mendys
Consider mapping
<class name="MedDRATerm" table="MBROW_MEDDRA_TERMS"
mutable="false"
batch-size="50">
<cache usage="read-only" region="dictionary" />
<id name="medDRATermId" type="long"
column="TERM_ID">
<generator class="assigned" />
</id>
<map name="termNames" table="MBROW_TERM_NAMES"
lazy="true"
batch-size="50">
<cache usage="read-only" region="dictionary" />
<key column="MEDDRA_CODE" property-ref="medDRACode" />
<index column="LANGUAGE_ID"
type="com.roche.dss.meddra.dao.type.LanguageType" />
<element column="NAME" type="string" />
</map>
<property name="medDRACode" column="MEDDRA_CODE"
type="com.roche.dss.meddra.dao.type.MedDRACodeType" />
</class>
<class name="MedDRATermInstance" table="MBROW_MEDDRA_TREES"
mutable="false">
<cache usage="read-only" region="dictionary" />
<id name="medDRATermInstanceId" type="long"
column="NODE_ID">
<generator class="assigned" />
</id>
<many-to-one name="medDRATerm" class="MedDRATerm"
column="TERM_ID" fetch="join" not-null="true"
insert="false"
update="false" />
</class>
When you execute a query:
from MedDRATermInstance i where i.version=:versionId and i.medDRATerm in (:terms)
and then using the _same session_ you will iterate over returned collection and will call
session.get(id) for returned records it is very likely that for _SOME_ (random??) of
objects when you will try to access its properties you will get following exception
thrown:
2006-06-07 19:25:11,942 ERROR org.hibernate.LazyInitializationException - failed to
lazily initialize a collection of role: com.roche.dss.meddra.model.MedDRATerm.termNames,
no session or session was
losed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of
role: com.roche.dss.meddra.model.MedDRATerm.termNames, no session or session was closed
at
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)
at
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350)
at
org.hibernate.collection.AbstractPersistentCollection.readElementByIndex(AbstractPersistentCollection.java:151)
at org.hibernate.collection.PersistentMap.get(PersistentMap.java:127)
Calling session.clear() before session.get() helps to workaround this but causes all the
records to be fethed again from the database.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira