[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-3062) Incompleted Collection Returned from Joined Fetch

Christian Wasel (JIRA) noreply at atlassian.com
Wed Oct 22 08:44:05 EDT 2008


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-3062?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=31493#action_31493 ] 

Christian Wasel commented on HHH-3062:
--------------------------------------

I tried the workaround above from Toni Lin, but in my application it didn't worked. Still a wrong number of elements in the sub-collection.

> Incompleted Collection Returned from Joined Fetch
> -------------------------------------------------
>
>                 Key: HHH-3062
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3062
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: query-hql
>    Affects Versions: 3.2.5
>         Environment: Windows XP SP2, JDK 1.6_03, MySQL 5, Toncat 5.5.25
>            Reporter: Tony Lin
>         Attachments: org.zip, subsets.sql
>
>
> Executing the following query:
> select subset from com.alphait.domain.snomed.object.SubsetImpl as subset join fetch subset.members as members left join fetch members.parent
> The members returned after the first subset are not complete, all but the first member are missing.
> The classes are attached in HHH-3056. The test data is in the attached file, please load it to a mysql database.
> After investigation, the problem seems be in Loader.java's sequentialLoad method:
> 		try {
> 			do {
> 				Object loaded = getRowFromResultSet(
> 						resultSet,
> 						session,
> 						queryParameters,
> 						getLockModes( queryParameters.getLockModes() ),
> 						null,
> 						hydratedObjects,
> 						loadedKeys,
> 						returnProxies
> 					);
> 				if ( result == null ) {
> 					result = loaded;
> 				}
> 			} 
> 			while ( keyToRead.equals( loadedKeys[0] ) && resultSet.next() );
> 		}
> 		catch ( SQLException sqle ) {
> 			throw JDBCExceptionHelper.convert(
> 			        factory.getSQLExceptionConverter(),
> 			        sqle,
> 			        "could not perform sequential read of results (forward)",
> 			        getSQLString()
> 				);
> 		}
> 		initializeEntitiesAndCollections( 
> 				hydratedObjects, 
> 				resultSet, 
> 				session, 
> 				queryParameters.isReadOnly() 
> 			);
> 		session.getPersistenceContext().initializeNonLazyCollections();
> 		return result;
> It will fetch the next subset also, but only the first member, and the member's parent. These three are hydrated, and resolved when initializeEntitiesAndCollections is called.
> This makes the members collection to be freezed, and no member can be added.
> We put the following:
>     key = getKeyFromResultSet(
> 					        0,
> 							persisters[0],
> 							null,
> 							resultSet,
> 							session
> 						);
> 				
>     if (!keyToRead.equals(key)) { // we are done, no moving forward
> 	break;
>     }
> 			
> before calling getRowFromResultSet(). This temporarily solved the problem for us.
> Also this kind of query cannot have order by containing only the members'  properties as it will return rows not ordered by Subset's ID. I think the HQL query parser should not permit this. 	

-- 
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