[hibernate-commits] Hibernate SVN: r14330 - in search/trunk/src: java/org/hibernate/search/engine and 1 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Tue Feb 12 11:06:21 EST 2008


Author: epbernard
Date: 2008-02-12 11:06:21 -0500 (Tue, 12 Feb 2008)
New Revision: 14330

Added:
   search/trunk/src/test/org/hibernate/search/test/embedded/Person.java
Modified:
   search/trunk/src/java/org/hibernate/search/annotations/IndexedEmbedded.java
   search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java
   search/trunk/src/test/org/hibernate/search/test/embedded/Address.java
   search/trunk/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java
   search/trunk/src/test/org/hibernate/search/test/embedded/Owner.java
Log:
HSEARCH-125 support for targetElement

Modified: search/trunk/src/java/org/hibernate/search/annotations/IndexedEmbedded.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/annotations/IndexedEmbedded.java	2008-02-11 05:18:30 UTC (rev 14329)
+++ search/trunk/src/java/org/hibernate/search/annotations/IndexedEmbedded.java	2008-02-12 16:06:21 UTC (rev 14330)
@@ -28,4 +28,9 @@
 	 * Default: infinite (an exception will be raised in case of class circular reference when infinite is chosen)
 	 */
 	int depth() default Integer.MAX_VALUE;
+
+	/**
+	 * Overrides the type of an association. If a collection, overrides the type of the collection generics
+	 */
+	Class targetElement() default void.class;
 }

Modified: search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java	2008-02-11 05:18:30 UTC (rev 14329)
+++ search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java	2008-02-12 16:06:21 UTC (rev 14330)
@@ -240,7 +240,13 @@
 			maxLevel = potentialLevel > maxLevel ? maxLevel : potentialLevel;
 			level++;
 
-			XClass elementClass = member.getElementClass();
+			XClass elementClass;
+			if ( void.class == embeddedAnn.targetElement() ) {
+				elementClass = member.getElementClass();
+			}
+			else {
+				elementClass = reflectionManager.toXClass( embeddedAnn.targetElement() );
+			}
 			if ( maxLevel == Integer.MAX_VALUE //infinite
 					&& processedClasses.contains( elementClass ) ) {
 				throw new SearchException(

Modified: search/trunk/src/test/org/hibernate/search/test/embedded/Address.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/embedded/Address.java	2008-02-11 05:18:30 UTC (rev 14329)
+++ search/trunk/src/test/org/hibernate/search/test/embedded/Address.java	2008-02-12 16:06:21 UTC (rev 14330)
@@ -16,6 +16,7 @@
 import org.hibernate.search.annotations.Index;
 import org.hibernate.search.annotations.Indexed;
 import org.hibernate.search.annotations.IndexedEmbedded;
+import org.hibernate.annotations.Target;
 
 /**
  * @author Emmanuel Bernard
@@ -32,8 +33,9 @@
 	@Field(index= Index.TOKENIZED)
 	private String street;
 
-	@IndexedEmbedded(depth = 1, prefix = "ownedBy_")
-	private Owner ownedBy;
+	@IndexedEmbedded(depth = 1, prefix = "ownedBy_", targetElement = Owner.class)
+	@Target(Owner.class)
+	private Person ownedBy;
 
 	@OneToMany(mappedBy = "address")
 	@ContainedIn
@@ -68,11 +70,11 @@
 		this.street = street;
 	}
 
-	public Owner getOwnedBy() {
+	public Person getOwnedBy() {
 		return ownedBy;
 	}
 
-	public void setOwnedBy(Owner ownedBy) {
+	public void setOwnedBy(Person ownedBy) {
 		this.ownedBy = ownedBy;
 	}
 

Modified: search/trunk/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java	2008-02-11 05:18:30 UTC (rev 14329)
+++ search/trunk/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java	2008-02-12 16:06:21 UTC (rev 14330)
@@ -31,7 +31,7 @@
 		a.setStreet( "Tower place" );
 		a.getTowers().add( tower );
 		tower.setAddress( a );
-		Owner o = new Owner();
+		Person o = new Owner();
 		o.setName( "Atlanta Renting corp" );
 		a.setOwnedBy( o );
 		o.setAddress( a );
@@ -99,7 +99,7 @@
 		a.setStreet( "Tower place" );
 		a.getTowers().add( tower );
 		tower.setAddress( a );
-		Owner o = new Owner();
+		Person o = new Owner();
 		o.setName( "Atlanta Renting corp" );
 		a.setOwnedBy( o );
 		o.setAddress( a );

Modified: search/trunk/src/test/org/hibernate/search/test/embedded/Owner.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/embedded/Owner.java	2008-02-11 05:18:30 UTC (rev 14329)
+++ search/trunk/src/test/org/hibernate/search/test/embedded/Owner.java	2008-02-12 16:06:21 UTC (rev 14330)
@@ -12,7 +12,7 @@
  * @author Emmanuel Bernard
  */
 @Embeddable
-public class Owner {
+public class Owner implements Person {
 	@Field(index = Index.TOKENIZED)
 	private String name;
 

Added: search/trunk/src/test/org/hibernate/search/test/embedded/Person.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/embedded/Person.java	                        (rev 0)
+++ search/trunk/src/test/org/hibernate/search/test/embedded/Person.java	2008-02-12 16:06:21 UTC (rev 14330)
@@ -0,0 +1,15 @@
+//$
+package org.hibernate.search.test.embedded;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface Person {
+	public String getName();
+
+	public void setName(String name);
+
+	public Address getAddress();
+
+	public void setAddress(Address address);
+}




More information about the hibernate-commits mailing list