[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-2862) Collection is not associated with any session exception when doing an eager fetch on a non-unique collection.
Sylvain Veyrié (JIRA)
noreply at atlassian.com
Fri Apr 10 10:08:18 EDT 2009
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-2862?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=32843#action_32843 ]
Sylvain Veyrié commented on HHH-2862:
-------------------------------------
Same for me with Hibernate 3.2.6 with a map collection mapped with JPA annotations and Apache Derby.
If my query result is a list of entities that references each a different map content : OK
If two references the same content (= the @JoinColumn value is the same for two entities), it leads to "session is closed" - even if session is open (lazy) or "collection is not associated with any session" (eager)
> Collection is not associated with any session exception when doing an eager fetch on a non-unique collection.
> -------------------------------------------------------------------------------------------------------------
>
> Key: HHH-2862
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2862
> Project: Hibernate Core
> Issue Type: Bug
> Environment: Hibernate 3.1.3 - Hibernate 3.2.5, HSQLDB, Java5
> Reporter: Paul Andrews
> Attachments: bug.zip, testcase.zip
>
>
> It is basically caused by having an eager collection where the key of the collection is not unique in the results.
> The code works as follows in CollectionType.getCollection():
> ....
> persistenceContext.addUninitializedCollection( persister, collection, key );
>
> // some collections are not lazy:
> if ( initializeImmediately( entityMode ) ) {
> session.initializeCollection( collection, false );
> }
> else if ( !persister.isLazy() ) {
> persistenceContext.addNonLazyCollection( collection );
> }
>
> if ( hasHolder( entityMode ) ) {
> session.getPersistenceContext().addCollectionHolder( collection );
> }
> if persistenceContext.addUninitializedCollection() detects that the collection with the given key has already been added it clears the session on the old instance of the collection (sets it to null). However, that collection has already been added to the persistence context by an earlier call to this method. So later when StatefulPersistenceContext.initializeNonLazyCollections() is called it iterates through all of the collections in the persistence context (including those which have had their session set to null by addUninitializedCollection()), calling forceInitialization() which throws a 'collection is not associated with any session' exception.
--
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.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list