Skip to content

Commit cd09b02

Browse files
committed
HSEARCH-2301 Test for the effect of full-text filtering on the generated loading Criteria
1 parent d43b49e commit cd09b02

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

orm/src/test/java/org/hibernate/search/test/query/initandlookup/CriteriaObjectInitializerAndHierarchyInheritanceTest.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import org.apache.lucene.index.Term;
2222
import org.apache.lucene.search.BooleanClause.Occur;
2323
import org.apache.lucene.search.BooleanQuery;
24+
import org.apache.lucene.search.MatchAllDocsQuery;
25+
import org.apache.lucene.search.Query;
2426
import org.apache.lucene.search.Sort;
2527
import org.apache.lucene.search.SortField;
2628
import org.apache.lucene.search.TermQuery;
@@ -111,6 +113,24 @@ public void testJoinsAreOnlyOnUsefulEntityTypes() throws Exception {
111113
// here, we have 2 Criterias returned: we only test the first one
112114
assertThat( BytemanHelper.consumeNextRecordedEvent() ).isIn( AAA.class.getName(), BA.class.getName() );
113115

116+
results = getResultsFiltered( session, new MatchAllDocsQuery(), A.class );
117+
assertThat( BytemanHelper.consumeNextRecordedEvent() ).isEqualTo( A.class.getName() );
118+
119+
// and finally we verify that if the full-text query is narrowing results to a subset of types,
120+
// only these are being targeted by the loading criteria.
121+
// First the simple case, narrowing down to a single type:
122+
final TermQuery termQueryAAA = new TermQuery( new Term( "name", "aaa" ) );
123+
results = getResultsFiltered( session, termQueryAAA, A.class );
124+
assertThat( BytemanHelper.consumeNextRecordedEvent() ).isEqualTo( AAA.class.getName() );
125+
126+
// And then when it narrows down to two types, use a Join Criteria on the first upper shared type:
127+
BooleanQuery.Builder bqb = new BooleanQuery.Builder();
128+
final TermQuery termQueryAAB = new TermQuery( new Term( "name", "aab" ) );
129+
bqb.add( termQueryAAA, Occur.SHOULD );
130+
bqb.add( termQueryAAB, Occur.SHOULD );
131+
results = getResultsFiltered( session, bqb.build(), A.class );
132+
assertThat( BytemanHelper.consumeNextRecordedEvent() ).isEqualTo( AA.class.getName() );
133+
114134
s.close();
115135
}
116136

@@ -127,7 +147,11 @@ private List<?> getResults(FullTextSession session, Class<? extends BaseEntity>.
127147
for ( Class<? extends BaseEntity> clazz : classes ) {
128148
bqb.add( new TermQuery( new Term( "name", clazz.getSimpleName().toLowerCase( Locale.ENGLISH ) ) ), Occur.SHOULD );
129149
}
130-
return session.createFullTextQuery( bqb.build(), BaseEntity.class )
150+
return getResultsFiltered( session, bqb.build(), BaseEntity.class );
151+
}
152+
153+
private List<?> getResultsFiltered(FullTextSession session, Query query, Class<? extends BaseEntity>... classes) {
154+
return session.createFullTextQuery( query, classes )
131155
.setSort( new Sort( new SortField( "idSort", SortField.Type.INT ) ) )
132156
.list();
133157
}

0 commit comments

Comments
 (0)