[hibernate-commits] Hibernate SVN: r14208 - in core/branches/Branch_3_2_4_SP1_CP: test/org/hibernate/test/component/basic and 1 other directory.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Wed Nov 28 17:10:09 EST 2007


Author: cbredesen
Date: 2007-11-28 17:10:08 -0500 (Wed, 28 Nov 2007)
New Revision: 14208

Added:
   core/branches/Branch_3_2_4_SP1_CP/test/org/hibernate/test/component/basic/OptionalComponent.java
Modified:
   core/branches/Branch_3_2_4_SP1_CP/src/org/hibernate/type/TypeFactory.java
   core/branches/Branch_3_2_4_SP1_CP/test/org/hibernate/test/component/basic/ComponentTest.java
   core/branches/Branch_3_2_4_SP1_CP/test/org/hibernate/test/component/basic/Employee.java
   core/branches/Branch_3_2_4_SP1_CP/test/org/hibernate/test/component/basic/User.hbm.xml
Log:
JBPAPP-357 - HHH-2542 - NullPointerException in TypeFactory.replaceAssociations for ComponentType

Modified: core/branches/Branch_3_2_4_SP1_CP/src/org/hibernate/type/TypeFactory.java
===================================================================
--- core/branches/Branch_3_2_4_SP1_CP/src/org/hibernate/type/TypeFactory.java	2007-11-28 21:19:33 UTC (rev 14207)
+++ core/branches/Branch_3_2_4_SP1_CP/src/org/hibernate/type/TypeFactory.java	2007-11-28 22:10:08 UTC (rev 14208)
@@ -553,7 +553,7 @@
 				AbstractComponentType componentType = ( AbstractComponentType ) types[i];
 				Type[] subtypes = componentType.getSubtypes();
 				Object[] origComponentValues = original[i] == null ? new Object[subtypes.length] : componentType.getPropertyValues( original[i], session );
-				Object[] targetComponentValues = componentType.getPropertyValues( target[i], session );
+				Object[] targetComponentValues = target[i] == null ? new Object[subtypes.length] : componentType.getPropertyValues( target[i], session );
 				replaceAssociations( origComponentValues, targetComponentValues, subtypes, session, null, copyCache, foreignKeyDirection );
 				copied[i] = target[i];
 			}

Modified: core/branches/Branch_3_2_4_SP1_CP/test/org/hibernate/test/component/basic/ComponentTest.java
===================================================================
--- core/branches/Branch_3_2_4_SP1_CP/test/org/hibernate/test/component/basic/ComponentTest.java	2007-11-28 21:19:33 UTC (rev 14207)
+++ core/branches/Branch_3_2_4_SP1_CP/test/org/hibernate/test/component/basic/ComponentTest.java	2007-11-28 22:10:08 UTC (rev 14208)
@@ -9,6 +9,7 @@
 
 import org.hibernate.Session;
 import org.hibernate.Transaction;
+import org.hibernate.Hibernate;
 import org.hibernate.cfg.Configuration;
 import org.hibernate.cfg.Environment;
 import org.hibernate.cfg.Mappings;
@@ -190,5 +191,131 @@
 		s.close();
 	}
 
+	public void testMergeComponent() {
+		Session s = openSession();
+		Transaction t = s.beginTransaction();
+		Employee emp = new Employee();
+		emp.setHireDate( new Date() );
+		emp.setPerson( new Person() );
+		emp.getPerson().setName( "steve" );
+		emp.getPerson().setDob( new Date() );
+		s.persist( emp );
+		t.commit();
+		s.close();
+
+		s = openSession();
+		t = s.beginTransaction();
+		emp = (Employee)s.get( Employee.class, emp.getId() );
+		t.commit();
+		s.close();
+
+		assertNull(emp.getOptionalComponent());
+		emp.setOptionalComponent( new OptionalComponent() );
+		emp.getOptionalComponent().setValue1( "emp-value1" );
+		emp.getOptionalComponent().setValue2( "emp-value2" );
+
+		s = openSession();
+		t = s.beginTransaction();
+		emp = (Employee)s.merge( emp );
+		t.commit();
+		s.close();
+
+		s = openSession();
+		t = s.beginTransaction();
+		emp = (Employee)s.get( Employee.class, emp.getId() );
+		t.commit();
+		s.close();
+
+		assertEquals("emp-value1", emp.getOptionalComponent().getValue1());
+		assertEquals("emp-value2", emp.getOptionalComponent().getValue2());
+		emp.getOptionalComponent().setValue1( null );
+		emp.getOptionalComponent().setValue2( null );
+
+		s = openSession();
+		t = s.beginTransaction();
+		emp = (Employee)s.merge( emp );
+		t.commit();
+		s.close();
+
+		s = openSession();
+		t = s.beginTransaction();
+		emp = (Employee)s.get( Employee.class, emp.getId() );
+		Hibernate.initialize(emp.getDirectReports());
+		t.commit();
+		s.close();
+
+		assertNull(emp.getOptionalComponent());
+
+		Employee emp1 = new Employee();
+		emp1.setHireDate( new Date() );
+		emp1.setPerson( new Person() );
+		emp1.getPerson().setName( "bozo" );
+		emp1.getPerson().setDob( new Date() );
+		emp.getDirectReports().add( emp1 );
+
+		s = openSession();
+		t = s.beginTransaction();
+		emp = (Employee)s.merge( emp );
+		t.commit();
+		s.close();
+
+		s = openSession();
+		t = s.beginTransaction();
+		emp = (Employee)s.get( Employee.class, emp.getId() );
+		Hibernate.initialize(emp.getDirectReports());
+		t.commit();
+		s.close();
+
+		assertEquals(1, emp.getDirectReports().size());
+		emp1 = (Employee)emp.getDirectReports().iterator().next();
+		assertNull( emp1.getOptionalComponent() );
+		emp1.setOptionalComponent( new OptionalComponent() );
+		emp1.getOptionalComponent().setValue1( "emp1-value1" );
+		emp1.getOptionalComponent().setValue2( "emp1-value2" );
+
+		s = openSession();
+		t = s.beginTransaction();
+		emp = (Employee)s.merge( emp );
+		t.commit();
+		s.close();
+
+		s = openSession();
+		t = s.beginTransaction();
+		emp = (Employee)s.get( Employee.class, emp.getId() );
+		Hibernate.initialize(emp.getDirectReports());
+		t.commit();
+		s.close();
+
+		assertEquals(1, emp.getDirectReports().size());
+		emp1 = (Employee)emp.getDirectReports().iterator().next();
+		assertEquals( "emp1-value1", emp1.getOptionalComponent().getValue1());
+		assertEquals( "emp1-value2", emp1.getOptionalComponent().getValue2());
+		emp1.getOptionalComponent().setValue1( null );
+		emp1.getOptionalComponent().setValue2( null );
+
+		s = openSession();
+		t = s.beginTransaction();
+		emp = (Employee)s.merge( emp );
+		t.commit();
+		s.close();
+
+		s = openSession();
+		t = s.beginTransaction();
+		emp = (Employee)s.get( Employee.class, emp.getId() );
+		Hibernate.initialize(emp.getDirectReports());
+		t.commit();
+		s.close();
+
+		assertEquals(1, emp.getDirectReports().size());
+		emp1 = (Employee)emp.getDirectReports().iterator().next();
+		assertNull(emp1.getOptionalComponent());
+
+		s = openSession();
+		t = s.beginTransaction();
+		s.delete( emp );
+		t.commit();
+		s.close();
+	}
+
 }
 

Modified: core/branches/Branch_3_2_4_SP1_CP/test/org/hibernate/test/component/basic/Employee.java
===================================================================
--- core/branches/Branch_3_2_4_SP1_CP/test/org/hibernate/test/component/basic/Employee.java	2007-11-28 21:19:33 UTC (rev 14207)
+++ core/branches/Branch_3_2_4_SP1_CP/test/org/hibernate/test/component/basic/Employee.java	2007-11-28 22:10:08 UTC (rev 14208)
@@ -1,38 +1,58 @@
-package org.hibernate.test.component.basic;
-
-import java.util.Date;
-
-/**
- * todo: describe Employee
- *
- * @author Steve Ebersole
- */
-public class Employee {
-	private Long id;
-	private Person person;
-	private Date hireDate;
-
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public Person getPerson() {
-		return person;
-	}
-
-	public void setPerson(Person person) {
-		this.person = person;
-	}
-
-	public Date getHireDate() {
-		return hireDate;
-	}
-
-	public void setHireDate(Date hireDate) {
-		this.hireDate = hireDate;
-	}
-}
+package org.hibernate.test.component.basic;
+
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * todo: describe Employee
+ *
+ * @author Steve Ebersole
+ */
+public class Employee {
+	private Long id;
+	private Person person;
+	private Date hireDate;
+	private OptionalComponent optionalComponent;
+	private Set directReports = new HashSet();
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Person getPerson() {
+		return person;
+	}
+
+	public void setPerson(Person person) {
+		this.person = person;
+	}
+
+	public Date getHireDate() {
+		return hireDate;
+	}
+
+	public void setHireDate(Date hireDate) {
+		this.hireDate = hireDate;
+	}
+
+	public OptionalComponent getOptionalComponent() {
+		return optionalComponent;
+	}
+
+	public void setOptionalComponent(OptionalComponent optionalComponent) {
+		this.optionalComponent = optionalComponent;
+	}
+
+	public Set getDirectReports() {
+		return directReports;
+	}
+
+	public void setDirectReports(Set directReports) {
+		this.directReports = directReports;
+	}
+}

Added: core/branches/Branch_3_2_4_SP1_CP/test/org/hibernate/test/component/basic/OptionalComponent.java
===================================================================
--- core/branches/Branch_3_2_4_SP1_CP/test/org/hibernate/test/component/basic/OptionalComponent.java	                        (rev 0)
+++ core/branches/Branch_3_2_4_SP1_CP/test/org/hibernate/test/component/basic/OptionalComponent.java	2007-11-28 22:10:08 UTC (rev 14208)
@@ -0,0 +1,27 @@
+//$Id: $
+package org.hibernate.test.component.basic;
+
+/**
+ * @author Gail Badner
+ */
+
+public class OptionalComponent {
+	private String value1;
+	private String value2;
+
+	public String getValue1() {
+		return value1;
+	}
+
+	public void setValue1(String value1) {
+		this.value1 = value1;
+	}
+
+	public String getValue2() {
+		return value2;
+	}
+
+	public void setValue2(String value2) {
+		this.value2 = value2;
+	}
+}

Modified: core/branches/Branch_3_2_4_SP1_CP/test/org/hibernate/test/component/basic/User.hbm.xml
===================================================================
--- core/branches/Branch_3_2_4_SP1_CP/test/org/hibernate/test/component/basic/User.hbm.xml	2007-11-28 21:19:33 UTC (rev 14207)
+++ core/branches/Branch_3_2_4_SP1_CP/test/org/hibernate/test/component/basic/User.hbm.xml	2007-11-28 22:10:08 UTC (rev 14208)
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC 
+<!DOCTYPE hibernate-mapping PUBLIC
 	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 
@@ -8,7 +8,7 @@
 -->
 
 <hibernate-mapping package="org.hibernate.test.component.basic">
-	
+
 	<class name="User" table="T_USER">
 		<id name="userName"/>
 		<timestamp name="lastModified"/>
@@ -19,9 +19,9 @@
 			<property name="address"/>
 			<property name="previousAddress" insert="false"/>
 			<property name="yob" formula="year(dob)"/>
-			<property name="currentAddress" 
-				column="address" 
-				insert="false" 
+			<property name="currentAddress"
+				column="address"
+				insert="false"
 				update="false"/>
 		</component>
 	</class>
@@ -35,8 +35,16 @@
 			<property name="name" update="false" not-null="true"/>
 			<property name="dob" update="false" not-null="true"/>
 		</component>
+		<component name="optionalComponent">
+			<property name="value1" not-null="false"/>
+			<property name="value2" not-null="false"/>
+		</component>
+		<set name="directReports" cascade="all-delete-orphan,merge" lazy="true">
+			<key column="PARENT_ID" />
+			<one-to-many class="Employee"/>
+		</set>
 	</class>
-	
+
 	<query name="userNameIn"><![CDATA[from User where person.name in (:nameList) or userName in (:nameList)]]></query>
-	
+
 </hibernate-mapping>




More information about the hibernate-commits mailing list