Author: epbernard
Date: 2007-03-15 20:36:51 -0400 (Thu, 15 Mar 2007)
New Revision: 11292
Modified:
trunk/HibernateExt/search/src/java/org/hibernate/search/engine/DocumentBuilder.java
trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Address.java
trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java
trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Tower.java
Log:
Make @ContainedIn work with Collections
Modified:
trunk/HibernateExt/search/src/java/org/hibernate/search/engine/DocumentBuilder.java
===================================================================
---
trunk/HibernateExt/search/src/java/org/hibernate/search/engine/DocumentBuilder.java 2007-03-16
00:05:44 UTC (rev 11291)
+++
trunk/HibernateExt/search/src/java/org/hibernate/search/engine/DocumentBuilder.java 2007-03-16
00:36:51 UTC (rev 11292)
@@ -338,11 +338,13 @@
XMember member = metadata.containedInGetters.get( i );
Object value = getMemberValue( instance, member );
if (value == null) continue;
- Class valueClass = Hibernate.getClass( value );
- DocumentBuilder builder = searchFactory.getDocumentBuilders().get( valueClass );
- if (builder == null) continue;
+
if ( member.isArray() ) {
for ( Object arrayValue : (Object[]) value ) {
+ //highly inneficient but safe wrt the actual targeted class
+ Class valueClass = Hibernate.getClass( arrayValue );
+ DocumentBuilder builder = searchFactory.getDocumentBuilders().get( valueClass );
+ if (builder == null) continue;
processContainedInValue( arrayValue, member, queue, valueClass, builder,
searchFactory );
}
}
@@ -356,10 +358,17 @@
collection = (Collection) value;
}
for ( Object collectionValue : collection ) {
+ //highly inneficient but safe wrt the actual targeted class
+ Class valueClass = Hibernate.getClass( collectionValue );
+ DocumentBuilder builder = searchFactory.getDocumentBuilders().get( valueClass );
+ if (builder == null) continue;
processContainedInValue( collectionValue, member, queue, valueClass, builder,
searchFactory );
}
}
else {
+ Class valueClass = Hibernate.getClass( value );
+ DocumentBuilder builder = searchFactory.getDocumentBuilders().get( valueClass );
+ if (builder == null) continue;
processContainedInValue( value, member, queue, valueClass, builder, searchFactory );
}
}
Modified:
trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Address.java
===================================================================
---
trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Address.java 2007-03-16
00:05:44 UTC (rev 11291)
+++
trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Address.java 2007-03-16
00:36:51 UTC (rev 11292)
@@ -1,10 +1,13 @@
//$Id: $
package org.hibernate.search.test.embedded;
+import java.util.Set;
+import java.util.HashSet;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.OneToOne;
+import javax.persistence.OneToMany;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.DocumentId;
@@ -31,9 +34,9 @@
@IndexedEmbedded(depth = 1, prefix = "ownedBy_")
private Owner ownedBy;
- @OneToOne(mappedBy = "address")
+ @OneToMany(mappedBy = "address")
@ContainedIn
- private Tower tower;
+ private Set<Tower> towers = new HashSet<Tower>();
public Long getId() {
@@ -61,11 +64,11 @@
}
- public Tower getTower() {
- return tower;
+ public Set<Tower> getTowers() {
+ return towers;
}
- public void setTower(Tower tower) {
- this.tower = tower;
+ public void setTowers(Set<Tower> towers) {
+ this.towers = towers;
}
}
Modified:
trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java
===================================================================
---
trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java 2007-03-16
00:05:44 UTC (rev 11291)
+++
trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java 2007-03-16
00:36:51 UTC (rev 11292)
@@ -22,7 +22,7 @@
tower.setName( "JBoss tower" );
Address a = new Address();
a.setStreet( "Tower place");
- a.setTower( tower );
+ a.getTowers().add(tower);
tower.setAddress( a );
Owner o = new Owner();
o.setName( "Atlanta Renting corp" );
@@ -81,7 +81,7 @@
tower.setName( "JBoss tower" );
Address a = new Address();
a.setStreet( "Tower place");
- a.setTower( tower );
+ a.getTowers().add( tower );
tower.setAddress( a );
Owner o = new Owner();
o.setName( "Atlanta Renting corp" );
@@ -115,8 +115,9 @@
tx = s.beginTransaction();
address = (Address) s.get(Address.class, a.getId() );
- address.getTower().setAddress( null );
- address.setTower( null );
+ Tower tower1 = address.getTowers().iterator().next();
+ tower1.setAddress( null );
+ address.getTowers().remove( tower1 );
tx.commit();
s.clear();
Modified:
trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Tower.java
===================================================================
---
trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Tower.java 2007-03-16
00:05:44 UTC (rev 11291)
+++
trunk/HibernateExt/search/src/test/org/hibernate/search/test/embedded/Tower.java 2007-03-16
00:36:51 UTC (rev 11292)
@@ -6,6 +6,7 @@
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
+import javax.persistence.ManyToOne;
import org.hibernate.search.annotations.DocumentId;
import org.hibernate.search.annotations.Field;
@@ -27,7 +28,7 @@
@Field( index = Index.TOKENIZED )
private String name;
- @OneToOne( cascade = { CascadeType.PERSIST, CascadeType.REMOVE } )
+ @ManyToOne( cascade = { CascadeType.PERSIST, CascadeType.REMOVE } )
@IndexedEmbedded
private Address address;
Show replies by date