[hibernate-commits] Hibernate SVN: r19160 - search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Apr 2 10:37:20 EDT 2010


Author: epbernard
Date: 2010-04-02 10:37:20 -0400 (Fri, 02 Apr 2010)
New Revision: 19160

Modified:
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/MultiClassesQueryLoader.java
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/ObjectLoaderHelper.java
Log:
HSEARCH-478 generalize the use of the composite pk protection when using in restrictions

Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/MultiClassesQueryLoader.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/MultiClassesQueryLoader.java	2010-04-02 12:58:46 UTC (rev 19159)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/MultiClassesQueryLoader.java	2010-04-02 14:37:20 UTC (rev 19160)
@@ -117,13 +117,9 @@
 			final RootEntityMetadata key = entry.getKey();
 			final List<EntityInfo> value = entry.getValue();
 			final EntityInfo[] bucketEntityInfos = value.toArray( new EntityInfo[value.size()] );
-			if ( key.useObjectLoader ) {
-				objectLoader.load( bucketEntityInfos );
-			}
-			else {
-				ObjectLoaderHelper.initializeObjects( bucketEntityInfos,
-						key.criteria, key.rootEntity, searchFactoryImplementor);
-			}
+
+			ObjectLoaderHelper.initializeObjects( bucketEntityInfos,
+					key.criteria, key.rootEntity, searchFactoryImplementor);
 		}
 		return ObjectLoaderHelper.returnAlreadyLoadedObjectsInCorrectOrder( entityInfos, session );
 	}
@@ -132,7 +128,6 @@
 		public final Class<?> rootEntity;
 		public final Set<Class<?>> mappedSubclasses;
 		private final Criteria criteria;
-		public final boolean useObjectLoader;
 
 		RootEntityMetadata(Class<?> rootEntity, SearchFactoryImplementor searchFactoryImplementor, Session session) {
 			this.rootEntity = rootEntity;
@@ -140,7 +135,6 @@
 			if ( provider == null) throw new AssertionFailure("Provider not found for class: " + rootEntity);
 			this.mappedSubclasses = provider.getMappedSubclasses();
 			this.criteria = session.createCriteria( rootEntity );
-			this.useObjectLoader = !provider.isSafeFromTupleId();
 		}
 	}
 }

Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/ObjectLoaderHelper.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/ObjectLoaderHelper.java	2010-04-02 12:58:46 UTC (rev 19159)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/ObjectLoaderHelper.java	2010-04-02 14:37:20 UTC (rev 19160)
@@ -65,28 +65,39 @@
 		return maybeProxy;
 	}
 
-	public static void initializeObjects(EntityInfo[] entityInfos, Criteria criteria, Class<?> entityType,
+	public static void initializeObjects(EntityInfo[] entityInfos,
+										 Criteria criteria, Class<?> entityType,
 										 SearchFactoryImplementor searchFactoryImplementor) {
 		final int maxResults = entityInfos.length;
 		if ( maxResults == 0 ) return;
 
 		Set<Class<?>> indexedEntities = searchFactoryImplementor.getIndexedTypesPolymorphic( new Class<?>[]{entityType} );
 		DocumentBuilderIndexedEntity<?> builder = searchFactoryImplementor.getDocumentBuilderIndexedEntity( indexedEntities.iterator().next() );
+		//FIXME starting from Core 3.5, this loging is handled in Restrictions.in so we should remove this code.
+		boolean useInClause = builder.isSafeFromTupleId();
 		String idName = builder.getIdentifierName();
-		int loop = maxResults / MAX_IN_CLAUSE;
-		boolean exact = maxResults % MAX_IN_CLAUSE == 0;
-		if ( !exact ) loop++;
+
 		Disjunction disjunction = Restrictions.disjunction();
-		for (int index = 0; index < loop; index++) {
-			int max = index * MAX_IN_CLAUSE + MAX_IN_CLAUSE <= maxResults ?
-					index * MAX_IN_CLAUSE + MAX_IN_CLAUSE :
-					maxResults;
-			List<Serializable> ids = new ArrayList<Serializable>( max - index * MAX_IN_CLAUSE );
-			for (int entityInfoIndex = index * MAX_IN_CLAUSE; entityInfoIndex < max; entityInfoIndex++) {
-				ids.add( entityInfos[entityInfoIndex].id );
+		if (useInClause) {
+			int loop = maxResults / MAX_IN_CLAUSE;
+			boolean exact = maxResults % MAX_IN_CLAUSE == 0;
+			if ( !exact ) loop++;
+			for (int index = 0; index < loop; index++) {
+				int max = index * MAX_IN_CLAUSE + MAX_IN_CLAUSE <= maxResults ?
+						index * MAX_IN_CLAUSE + MAX_IN_CLAUSE :
+						maxResults;
+				List<Serializable> ids = new ArrayList<Serializable>( max - index * MAX_IN_CLAUSE );
+				for (int entityInfoIndex = index * MAX_IN_CLAUSE; entityInfoIndex < max; entityInfoIndex++) {
+					ids.add( entityInfos[entityInfoIndex].id );
+				}
+				disjunction.add( Restrictions.in( idName, ids ) );
 			}
-			disjunction.add( Restrictions.in( idName, ids ) );
 		}
+		else {
+			for (EntityInfo entityInfo : entityInfos) {
+				disjunction.add( Restrictions.eq( idName, entityInfo.id ) );
+			}
+		}
 		criteria.add( disjunction );
 		criteria.list(); //load all objects
 	}



More information about the hibernate-commits mailing list