[hibernate-commits] Hibernate SVN: r20819 - search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/query.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Wed Oct 13 06:21:57 EDT 2010


Author: epbernard
Date: 2010-10-13 06:21:56 -0400 (Wed, 13 Oct 2010)
New Revision: 20819

Added:
   search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/query/Husband.java
   search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/query/Spouse.java
Modified:
   search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/query/ProjectionQueryTest.java
Log:
HSEARCH-546 Support THIS Projection and fetching definition

Add unit tests reporducing the issue

Added: search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/query/Husband.java
===================================================================
--- search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/query/Husband.java	                        (rev 0)
+++ search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/query/Husband.java	2010-10-13 10:21:56 UTC (rev 20819)
@@ -0,0 +1,34 @@
+package org.hibernate.search.test.query;
+
+import org.hibernate.search.annotations.Field;
+import org.hibernate.search.annotations.Index;
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.Store;
+
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+ at Indexed
+public class Husband {
+	@Id @GeneratedValue
+	public Long getId() { return id; }
+	public void setId(Long id) { this.id = id; }
+	private Long id;
+
+	@Field(index = Index.TOKENIZED, store = Store.YES)
+	public String getLastName() { return lastName; }
+	public void setLastName(String lastName) { this.lastName = lastName; }
+	private String lastName;
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	public Spouse getSpouse() { return spouse; }
+	public void setSpouse(Spouse spouse) { this.spouse = spouse; }
+	private Spouse spouse;
+}

Modified: search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/query/ProjectionQueryTest.java
===================================================================
--- search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/query/ProjectionQueryTest.java	2010-10-13 08:31:25 UTC (rev 20818)
+++ search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/query/ProjectionQueryTest.java	2010-10-13 10:21:56 UTC (rev 20819)
@@ -35,6 +35,9 @@
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.queryParser.QueryParser;
 import org.apache.lucene.search.*;
+import org.hibernate.Criteria;
+import org.hibernate.FetchMode;
+import org.hibernate.Hibernate;
 import org.hibernate.ScrollableResults;
 import org.hibernate.Session;
 import org.hibernate.Transaction;
@@ -42,6 +45,7 @@
 import org.hibernate.search.FullTextSession;
 import org.hibernate.search.Search;
 import org.hibernate.search.SearchException;
+import org.hibernate.search.query.dsl.QueryBuilder;
 import org.hibernate.search.test.SearchTestCase;
 
 /**
@@ -54,6 +58,53 @@
 public class ProjectionQueryTest extends SearchTestCase {
 
 	/**
+	 * HSEARCH-546
+	 */
+	public void testProjectionOfThisAndEAGERFetching() throws Exception {
+		FullTextSession s = Search.getFullTextSession( openSession() );
+
+		Transaction tx = s.beginTransaction();
+		Spouse spouse = new Spouse();
+		spouse.setFirstName("Christina");
+		s.save(spouse);
+		Husband h = new Husband();
+		h.setLastName("Roberto");
+		h.setSpouse(spouse);
+		s.save(h);
+		tx.commit();
+
+		s.clear();
+		tx = s.beginTransaction();
+		final QueryBuilder qb = s.getSearchFactory().buildQueryBuilder().forEntity(Husband.class).get();
+		Query query = qb.keyword().onField("lastName").matching("Roberto").createQuery();
+		org.hibernate.search.FullTextQuery hibQuery = s.createFullTextQuery( query, Husband.class );
+		hibQuery.setProjection( FullTextQuery.THIS );
+		Criteria fetchingStrategy = s.createCriteria(Husband.class);
+		fetchingStrategy.setFetchMode("spouse", FetchMode.JOIN);
+		hibQuery.setCriteriaQuery(fetchingStrategy);
+
+		List result = hibQuery.list();
+		assertNotNull( result );
+
+		Object[] projection = ( Object[] ) result.get( 0 );
+		assertNotNull( projection );
+		final Husband husband = (Husband) projection[0];
+
+		assertTrue( Hibernate.isInitialized( husband.getSpouse() ) );
+
+		//cleanup
+		for ( Object element : s.createQuery( "from " + Husband.class.getName() ).list() ) {
+			s.delete( element );
+		}
+		for ( Object element : s.createQuery( "from " + Spouse.class.getName() ).list() ) {
+			s.delete( element );
+		}
+
+		tx.commit();
+		s.close();
+	}
+	
+	/**
 	 * HSEARCH-296
 	 *
 	 * @throws Exception in case the test fails.
@@ -76,6 +127,11 @@
 		assertNotNull( projection );
 		assertEquals( "Wrong projected class", Employee.class, projection[0] );
 
+		//cleanup
+		for ( Object element : s.createQuery( "from " + Employee.class.getName() ).list() ) {
+			s.delete( element );
+		}
+
 		tx.commit();
 		s.close();
 	}
@@ -505,7 +561,9 @@
 		return new Class[] {
 				Book.class,
 				Author.class,
-				Employee.class
+				Employee.class,
+				Husband.class,
+				Spouse.class
 		};
 	}
 }

Added: search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/query/Spouse.java
===================================================================
--- search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/query/Spouse.java	                        (rev 0)
+++ search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/query/Spouse.java	2010-10-13 10:21:56 UTC (rev 20819)
@@ -0,0 +1,20 @@
+package org.hibernate.search.test.query;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Spouse {
+	@Id @GeneratedValue
+	public Long getId() { return id; }
+	public void setId(Long id) { this.id = id; }
+	private Long id;
+
+	public String getFirstName() { return firstName; }
+	public void setFirstName(String firstName) { this.firstName = firstName; }
+	private String firstName;
+}



More information about the hibernate-commits mailing list