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);
+}
Show replies by date