[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