[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