Package org.hibernate.search.test.query.criteria

Source Code of org.hibernate.search.test.query.criteria.MixedCriteriaTest

//$Id$
package org.hibernate.search.test.query.criteria;

import java.util.List;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
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.FullTextSession;
import org.hibernate.search.Search;
import org.hibernate.search.SearchException;
import org.hibernate.search.test.SearchTestCase;

/**
* @author Hardy Ferentschik
*/
public class MixedCriteriaTest extends SearchTestCase {
  /**
   * HSEARCH-360
   */
  public void testCriteriaWithFilteredEntity() throws Exception {
    indexTestData();

    // Search
    Session session = openSession();
    Transaction tx = session.beginTransaction();
    FullTextSession fullTextSession = Search.getFullTextSession( session );

    MultiFieldQueryParser parser = new MultiFieldQueryParser(
        new String[] { "kurztext" }, new StandardAnalyzer()
    );
    Query query = parser.parse( "combi OR sport" );

    Criteria criteria = session.createCriteria( AbstractCar.class );
    criteria.add( Restrictions.eq( "hasColor", Boolean.FALSE ) );

    org.hibernate.Query hibQuery = fullTextSession.createFullTextQuery( query, AbstractCar.class )
        .setCriteriaQuery( criteria );
    List result = hibQuery.list();
    assertEquals( 2, result.size() );
    tx.commit();
    session.close();
  }

  public void testCriteriaWithoutFilteredEntity() throws Exception {
    indexTestData();

    // Search
    Session session = openSession();
    Transaction tx = session.beginTransaction();
    FullTextSession fullTextSession = Search.getFullTextSession( session );

    MultiFieldQueryParser parser = new MultiFieldQueryParser(
        new String[] { "kurztext" }, new StandardAnalyzer()
    );
    Query query = parser.parse( "combi OR sport" );

    Criteria criteria = session.createCriteria( AbstractCar.class );
    criteria.add( Restrictions.eq( "hasColor", Boolean.FALSE ) );

    org.hibernate.Query hibQuery = fullTextSession.createFullTextQuery( query )
        .setCriteriaQuery( criteria );
    List result = hibQuery.list();
    assertEquals( 2, result.size() );
    tx.commit();
    session.close();
  }

  public void testCriteriaWithMultipleEntities() throws Exception {
    indexTestData();

    // Search
    Session session = openSession();
    Transaction tx = session.beginTransaction();
    FullTextSession fullTextSession = Search.getFullTextSession( session );

    MultiFieldQueryParser parser = new MultiFieldQueryParser(
        new String[] { "kurztext" }, new StandardAnalyzer()
    );
    Query query = parser.parse( "combi OR sport" );

    Criteria criteria = session.createCriteria( AbstractCar.class );
    criteria.add( Restrictions.eq( "hasColor", Boolean.FALSE ) );

    try {
      org.hibernate.Query hibQuery = fullTextSession.createFullTextQuery( query, AbstractCar.class, Bike.class )
          .setCriteriaQuery( criteria );
      hibQuery.list();
      fail();
    }
    catch ( SearchException se ) {
      assertEquals( "Cannot mix criteria and multiple entity types", se.getMessage() );
    }
    tx.commit();
    session.close();
  }

  private void indexTestData() {
    Session s = openSession();
    Transaction tx = s.beginTransaction();

    CombiCar combi = new CombiCar();
    combi.setKurztext( "combi" );
    s.persist( combi );

    SportCar sport = new SportCar();
    sport.setKurztext( "sport" );
    s.persist( sport );

    Bike bike = new Bike();
    bike.setKurztext( "bike" );
    s.persist( bike );
    tx.commit();
    s.close();
  }


  protected Class[] getMappings() {
    return new Class[] {
        AbstractCar.class, CombiCar.class, SportCar.class, Bike.class
    };
  }
}
TOP

Related Classes of org.hibernate.search.test.query.criteria.MixedCriteriaTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.