/* * Hibernate Search, full-text search for your domain model * * License: GNU Lesser General Public License (LGPL), version 2.1 or later * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.search.test.query.criteria; import java.util.List; import org.apache.lucene.search.Query; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.Restrictions; import org.hibernate.search.FullTextQuery; import org.hibernate.search.FullTextSession; import org.hibernate.search.Search; import org.hibernate.search.exception.SearchException; import org.hibernate.search.query.dsl.QueryBuilder; import org.hibernate.search.test.SearchTestBase; import org.junit.Test; import static org.fest.assertions.Assertions.assertThat; import static org.junit.Assert.assertEquals; /** * @author Julie Ingignoli * @author Emmanuel Bernard */ public class ResultSizeOnCriteriaTest extends SearchTestBase { @Test public void testResultSize() { indexTestData(); // Search Session session = openSession(); Transaction tx = session.beginTransaction(); FullTextSession fullTextSession = Search.getFullTextSession( session ); //Write query QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity( Tractor.class ).get(); Query query = qb.keyword().wildcard().onField( "owner" ).matching( "p*" ).createQuery(); //set criteria Criteria criteria = session.createCriteria( Tractor.class ); criteria.add( Restrictions.eq( "hasColor", Boolean.FALSE ) ); FullTextQuery hibQuery = fullTextSession.createFullTextQuery( query, Tractor.class ) .setCriteriaQuery( criteria ); List<Tractor> result = hibQuery.list(); //Result size is ok assertEquals( 1, result.size() ); for ( Tractor tractor : result ) { assertThat( tractor.isHasColor() ).isFalse(); assertThat( tractor.getOwner() ).startsWith( "P" ); } //Compare with resultSize try { hibQuery.getResultSize(); assertThat( true ).as( "HSEARCH000105 should have been raised" ).isFalse(); } catch (SearchException e) { assertThat( e.getMessage() ).startsWith( "HSEARCH000105" ); } assertThat( result ).hasSize( 1 ); //getResultSize get only count of tractors matching keyword on field "owner" beginning with "p*" tx.commit(); tx = session.beginTransaction(); for ( Object element : session.createQuery( "select t from Tractor t" ).list() ) { session.delete( element ); } tx.commit(); session.close(); } private void indexTestData() { Session s = openSession(); Transaction tx = s.beginTransaction(); Tractor tractor = new Tractor(); tractor.setKurztext( "tractor" ); tractor.setOwner( "Paul" ); tractor.removeColor(); s.persist( tractor ); Tractor tractor2 = new Tractor(); tractor2.setKurztext( "tractor" ); tractor2.setOwner( "Pierre" ); s.persist( tractor2 ); Tractor tractor3 = new Tractor(); tractor3.setKurztext( "tractor" ); tractor3.setOwner( "Jacques" ); s.persist( tractor3 ); tx.commit(); s.close(); } @Override public Class<?>[] getAnnotatedClasses() { return new Class[] { Tractor.class }; } }