2121import org .apache .lucene .index .Term ;
2222import org .apache .lucene .search .BooleanClause .Occur ;
2323import org .apache .lucene .search .BooleanQuery ;
24+ import org .apache .lucene .search .MatchAllDocsQuery ;
25+ import org .apache .lucene .search .Query ;
2426import org .apache .lucene .search .Sort ;
2527import org .apache .lucene .search .SortField ;
2628import 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
112114assertThat ( 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+
114134s .close ();
115135}
116136
@@ -127,7 +147,11 @@ private List<?> getResults(FullTextSession session, Class<? extends BaseEntity>.
127147for ( Class <? extends BaseEntity > clazz : classes ) {
128148bqb .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