[hibernate-commits] Hibernate SVN: r11292 - in trunk/HibernateExt/search/src: test/org/hibernate/search/test/embedded and 1 other directory.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Mar 15 20:36:51 EDT 2007


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;
 




More information about the hibernate-commits mailing list