[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