[hibernate-commits] Hibernate SVN: r19751 - in core/branches/Branch_3_5/envers/src: test/java/org/hibernate/envers/test/entities/components and 1 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Wed Jun 16 14:11:44 EDT 2010


Author: adamw
Date: 2010-06-16 14:11:44 -0400 (Wed, 16 Jun 2010)
New Revision: 19751

Added:
   core/branches/Branch_3_5/envers/src/test/java/org/hibernate/envers/test/entities/components/DefaultValueComponent1.java
   core/branches/Branch_3_5/envers/src/test/java/org/hibernate/envers/test/entities/components/DefaultValueComponent2.java
   core/branches/Branch_3_5/envers/src/test/java/org/hibernate/envers/test/entities/components/DefaultValueComponentTestEntity.java
   core/branches/Branch_3_5/envers/src/test/java/org/hibernate/envers/test/integration/components/DefaultValueComponents.java
Modified:
   core/branches/Branch_3_5/envers/src/main/java/org/hibernate/envers/entities/mapper/ComponentPropertyMapper.java
Log:
HHH-5288:
- applying patch by Erik-Berndt Scheper - thanks!
- Envers auditReader.find() returns wrong data for embedded components using fields with default values



Modified: core/branches/Branch_3_5/envers/src/main/java/org/hibernate/envers/entities/mapper/ComponentPropertyMapper.java
===================================================================
--- core/branches/Branch_3_5/envers/src/main/java/org/hibernate/envers/entities/mapper/ComponentPropertyMapper.java	2010-06-16 18:06:57 UTC (rev 19750)
+++ core/branches/Branch_3_5/envers/src/main/java/org/hibernate/envers/entities/mapper/ComponentPropertyMapper.java	2010-06-16 18:11:44 UTC (rev 19751)
@@ -24,19 +24,19 @@
 package org.hibernate.envers.entities.mapper;
 
 import java.io.Serializable;
+import java.lang.reflect.Field;
 import java.util.List;
 import java.util.Map;
 
+import org.hibernate.collection.PersistentCollection;
+import org.hibernate.engine.SessionImplementor;
+import org.hibernate.envers.configuration.AuditConfiguration;
 import org.hibernate.envers.entities.PropertyData;
-import org.hibernate.envers.configuration.AuditConfiguration;
 import org.hibernate.envers.exception.AuditException;
 import org.hibernate.envers.reader.AuditReaderImplementor;
 import org.hibernate.envers.tools.reflection.ReflectionTools;
-
-import org.hibernate.collection.PersistentCollection;
 import org.hibernate.property.Setter;
 import org.hibernate.util.ReflectHelper;
-import org.hibernate.engine.SessionImplementor;
 
 /**
  * @author Adam Warski (adam at warski dot org)
@@ -84,8 +84,12 @@
 			}
 		}
 
-		// And we don't have to set anything on the object - the default value is null
-		if (!allNullAndSingle) {
+		if (allNullAndSingle) {
+			// single property, but default value need not be null, so we'll set it to null anyway 
+			setter.set(obj, null, null);
+			
+		} else {
+			// set the component
 			try {
 				Object subObj = ReflectHelper.getDefaultConstructor(
 						Thread.currentThread().getContextClassLoader().loadClass(componentClassName)).newInstance();
@@ -97,7 +101,7 @@
 		}
     }
 
-    public List<PersistentCollectionChangeData> mapCollectionChanges(String referencingPropertyName,
+ 	public List<PersistentCollectionChangeData> mapCollectionChanges(String referencingPropertyName,
                                                                                     PersistentCollection newColl,
                                                                                     Serializable oldColl,
                                                                                     Serializable id) {

Added: core/branches/Branch_3_5/envers/src/test/java/org/hibernate/envers/test/entities/components/DefaultValueComponent1.java
===================================================================
--- core/branches/Branch_3_5/envers/src/test/java/org/hibernate/envers/test/entities/components/DefaultValueComponent1.java	                        (rev 0)
+++ core/branches/Branch_3_5/envers/src/test/java/org/hibernate/envers/test/entities/components/DefaultValueComponent1.java	2010-06-16 18:11:44 UTC (rev 19751)
@@ -0,0 +1,68 @@
+package org.hibernate.envers.test.entities.components;
+
+import javax.persistence.Embedded;
+
+/**
+ * 
+ * @author Erik-Berndt Scheper
+ * 
+ */
+public class DefaultValueComponent1 {
+
+	private String str1;
+
+	@Embedded
+	private DefaultValueComponent2 comp2 = new DefaultValueComponent2();
+
+	public static final DefaultValueComponent1 of(String str1,
+			DefaultValueComponent2 comp2) {
+		DefaultValueComponent1 instance = new DefaultValueComponent1();
+		instance.setStr1(str1);
+		instance.setComp2(comp2);
+		return instance;
+	}
+
+	public String getStr1() {
+		return str1;
+	}
+
+	public void setStr1(String str1) {
+		this.str1 = str1;
+	}
+
+	public DefaultValueComponent2 getComp2() {
+		return comp2;
+	}
+
+	public void setComp2(DefaultValueComponent2 comp2) {
+		this.comp2 = comp2;
+	}
+
+	public boolean equals(Object o) {
+		if (this == o)
+			return true;
+		if (!(o instanceof DefaultValueComponent1))
+			return false;
+
+		DefaultValueComponent1 that = (DefaultValueComponent1) o;
+
+		if (str1 != null ? !str1.equals(that.str1) : that.str1 != null)
+			return false;
+		if (comp2 != null ? !comp2.equals(that.comp2) : that.comp2 != null)
+			return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = (str1 != null ? str1.hashCode() : 0);
+		result = 31 * result + (comp2 != null ? comp2.hashCode() : 0);
+		return result;
+	}
+
+	public String toString() {
+		return "Comp1(str1 = " + str1 + ", comp2 = " + comp2 + ")";
+	}
+
+}

Added: core/branches/Branch_3_5/envers/src/test/java/org/hibernate/envers/test/entities/components/DefaultValueComponent2.java
===================================================================
--- core/branches/Branch_3_5/envers/src/test/java/org/hibernate/envers/test/entities/components/DefaultValueComponent2.java	                        (rev 0)
+++ core/branches/Branch_3_5/envers/src/test/java/org/hibernate/envers/test/entities/components/DefaultValueComponent2.java	2010-06-16 18:11:44 UTC (rev 19751)
@@ -0,0 +1,64 @@
+package org.hibernate.envers.test.entities.components;
+
+/**
+ * 
+ * @author Erik-Berndt Scheper
+ * 
+ */
+public class DefaultValueComponent2 {
+
+	private String str1 = "defaultValue";
+
+	private String str2;
+
+	public static final DefaultValueComponent2 of(String str1, String str2) {
+		DefaultValueComponent2 instance = new DefaultValueComponent2();
+		instance.setStr1(str1);
+		instance.setStr2(str2);
+		return instance;
+	}
+
+	public String getStr2() {
+		return str2;
+	}
+
+	public void setStr2(String str2) {
+		this.str2 = str2;
+	}
+
+	public String getStr1() {
+		return str1;
+	}
+
+	public void setStr1(String str1) {
+		this.str1 = str1;
+	}
+
+	public boolean equals(Object o) {
+		if (this == o)
+			return true;
+		if (!(o instanceof DefaultValueComponent2))
+			return false;
+
+		DefaultValueComponent2 that = (DefaultValueComponent2) o;
+
+		if (str1 != null ? !str1.equals(that.str1) : that.str1 != null)
+			return false;
+		if (str2 != null ? !str2.equals(that.str2) : that.str2 != null)
+			return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = (str1 != null ? str1.hashCode() : 0);
+		result = 31 * result + (str2 != null ? str2.hashCode() : 0);
+		return result;
+	}
+
+	public String toString() {
+		return "Comp2(str1 = " + str1 + ", str2 = " + str2 + ")";
+	}
+
+}

Added: core/branches/Branch_3_5/envers/src/test/java/org/hibernate/envers/test/entities/components/DefaultValueComponentTestEntity.java
===================================================================
--- core/branches/Branch_3_5/envers/src/test/java/org/hibernate/envers/test/entities/components/DefaultValueComponentTestEntity.java	                        (rev 0)
+++ core/branches/Branch_3_5/envers/src/test/java/org/hibernate/envers/test/entities/components/DefaultValueComponentTestEntity.java	2010-06-16 18:11:44 UTC (rev 19751)
@@ -0,0 +1,111 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+package org.hibernate.envers.test.entities.components;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Column;
+import javax.persistence.Embedded;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.envers.Audited;
+
+/**
+ * @author Erik-Berndt Scheper
+ */
+ at Entity
+ at Audited
+public class DefaultValueComponentTestEntity {
+	@Id
+	@GeneratedValue
+	private Integer id;
+
+	@Embedded
+	@Audited
+	@AttributeOverrides( { @AttributeOverride(name = "comp2.str1", column = @Column(name = "COMP2_STR1")) })
+	private DefaultValueComponent1 comp1 = null;
+
+	public DefaultValueComponentTestEntity() {
+	}
+
+	public static DefaultValueComponentTestEntity of(
+			DefaultValueComponent1 comp1) {
+		DefaultValueComponentTestEntity instance = new DefaultValueComponentTestEntity();
+		instance.setComp1(comp1);
+		return instance;
+	}
+
+	public static DefaultValueComponentTestEntity of(Integer id,
+			DefaultValueComponent1 comp1) {
+		DefaultValueComponentTestEntity instance = new DefaultValueComponentTestEntity();
+		instance.setId(id);
+		instance.setComp1(comp1);
+		return instance;
+	}
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public DefaultValueComponent1 getComp1() {
+		return comp1;
+	}
+
+	public void setComp1(DefaultValueComponent1 comp1) {
+		this.comp1 = comp1;
+	}
+
+	public boolean equals(Object o) {
+		if (this == o)
+			return true;
+		if (!(o instanceof DefaultValueComponentTestEntity))
+			return false;
+
+		DefaultValueComponentTestEntity that = (DefaultValueComponentTestEntity) o;
+
+		if (comp1 != null ? !comp1.equals(that.comp1) : that.comp1 != null)
+			return false;
+		if (id != null ? !id.equals(that.id) : that.id != null)
+			return false;
+
+		return true;
+	}
+
+	public int hashCode() {
+		int result;
+		result = (id != null ? id.hashCode() : 0);
+		result = 31 * result + (comp1 != null ? comp1.hashCode() : 0);
+		return result;
+	}
+
+	public String toString() {
+		return "CTE(id = " + id + ", comp1 = " + comp1 + ")";
+	}
+}

Added: core/branches/Branch_3_5/envers/src/test/java/org/hibernate/envers/test/integration/components/DefaultValueComponents.java
===================================================================
--- core/branches/Branch_3_5/envers/src/test/java/org/hibernate/envers/test/integration/components/DefaultValueComponents.java	                        (rev 0)
+++ core/branches/Branch_3_5/envers/src/test/java/org/hibernate/envers/test/integration/components/DefaultValueComponents.java	2010-06-16 18:11:44 UTC (rev 19751)
@@ -0,0 +1,383 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+package org.hibernate.envers.test.integration.components;
+
+import java.math.BigInteger;
+import java.util.Arrays;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.Ejb3Configuration;
+import org.hibernate.envers.test.AbstractEntityTest;
+import org.hibernate.envers.test.entities.components.DefaultValueComponent1;
+import org.hibernate.envers.test.entities.components.DefaultValueComponent2;
+import org.hibernate.envers.test.entities.components.DefaultValueComponentTestEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+/**
+ * Test class for components with default values.
+ * 
+ * @see <a
+ *      href="http://opensource.atlassian.com/projects/hibernate/browse/HHH-5288">
+ *      Hibernate JIRA </a>
+ * 
+ * @author Erik-Berndt Scheper
+ */
+public class DefaultValueComponents extends AbstractEntityTest {
+	private static final Logger log = LoggerFactory
+			.getLogger(DefaultValueComponents.class);
+
+	private Integer id0;
+	private Integer id1;
+	private Integer id2;
+	private Integer id3;
+	private Integer id4;
+	private Integer id5;
+	private Integer id6;
+
+	public void configure(Ejb3Configuration cfg) {
+		cfg.addAnnotatedClass(DefaultValueComponentTestEntity.class);
+	}
+
+	@BeforeClass(dependsOnMethods = "init")
+	public void initData() {
+		// Revision 1
+		EntityManager em = getEntityManager();
+		em.getTransaction().begin();
+
+		DefaultValueComponentTestEntity cte0 = DefaultValueComponentTestEntity
+				.of(null);
+
+		DefaultValueComponentTestEntity cte1 = DefaultValueComponentTestEntity
+				.of(DefaultValueComponent1.of("c1-str1", null));
+
+		DefaultValueComponentTestEntity cte2 = DefaultValueComponentTestEntity
+				.of(DefaultValueComponent1.of("c1-str1", DefaultValueComponent2
+						.of("c2-str1", "c2-str2")));
+
+		DefaultValueComponentTestEntity cte3 = DefaultValueComponentTestEntity
+				.of(DefaultValueComponent1.of(null, DefaultValueComponent2.of(
+						"c2-str1", "c2-str2")));
+
+		DefaultValueComponentTestEntity cte4 = DefaultValueComponentTestEntity
+				.of(DefaultValueComponent1.of(null, DefaultValueComponent2.of(
+						null, "c2-str2")));
+
+		DefaultValueComponentTestEntity cte5 = DefaultValueComponentTestEntity
+				.of(DefaultValueComponent1.of(null, DefaultValueComponent2.of(
+						"c2-str1", null)));
+
+		DefaultValueComponentTestEntity cte6 = DefaultValueComponentTestEntity
+				.of(DefaultValueComponent1.of(null, DefaultValueComponent2.of(
+						null, null)));
+
+		em.persist(cte0);
+		em.persist(cte1);
+		em.persist(cte2);
+		em.persist(cte3);
+		em.persist(cte4);
+		em.persist(cte5);
+		em.persist(cte6);
+
+		em.getTransaction().commit();
+
+		// Revision 2
+		em = getEntityManager();
+		em.getTransaction().begin();
+
+		cte0 = em.find(DefaultValueComponentTestEntity.class, cte0.getId());
+		cte1 = em.find(DefaultValueComponentTestEntity.class, cte1.getId());
+		cte2 = em.find(DefaultValueComponentTestEntity.class, cte2.getId());
+		cte3 = em.find(DefaultValueComponentTestEntity.class, cte3.getId());
+		cte4 = em.find(DefaultValueComponentTestEntity.class, cte4.getId());
+		cte5 = em.find(DefaultValueComponentTestEntity.class, cte5.getId());
+		cte6 = em.find(DefaultValueComponentTestEntity.class, cte6.getId());
+
+		cte0.setComp1(DefaultValueComponent1.of("upd-c1-str1", null));
+		cte1.setComp1(DefaultValueComponent1.of(null, DefaultValueComponent2
+				.of("upd-c2-str1", "upd-c2-str2")));
+		cte2.getComp1().getComp2().setStr1("upd-c2-str1");
+		cte3.getComp1().getComp2().setStr1("upd-c2-str1");
+		cte4.getComp1().getComp2().setStr1("upd-c2-str1");
+		cte5.getComp1().getComp2().setStr1("upd-c2-str1");
+		cte6.getComp1().getComp2().setStr1("upd-c2-str1");
+
+		em.getTransaction().commit();
+
+		// afterwards
+		id0 = cte0.getId();
+		id1 = cte1.getId();
+		id2 = cte2.getId();
+		id3 = cte3.getId();
+		id4 = cte4.getId();
+		id5 = cte5.getId();
+		id6 = cte6.getId();
+	}
+
+	@Test
+	public void testRevisionsCounts() {
+		log.error(getAuditReader().getRevisions(
+				DefaultValueComponentTestEntity.class, id0).toString());
+		log.error(getAuditReader().getRevisions(
+				DefaultValueComponentTestEntity.class, id1).toString());
+		log.error(getAuditReader().getRevisions(
+				DefaultValueComponentTestEntity.class, id2).toString());
+		log.error(getAuditReader().getRevisions(
+				DefaultValueComponentTestEntity.class, id3).toString());
+		log.error(getAuditReader().getRevisions(
+				DefaultValueComponentTestEntity.class, id4).toString());
+		log.error(getAuditReader().getRevisions(
+				DefaultValueComponentTestEntity.class, id5).toString());
+		log.error(getAuditReader().getRevisions(
+				DefaultValueComponentTestEntity.class, id6).toString());
+
+		assert Arrays.asList(1, 2).equals(
+				getAuditReader().getRevisions(
+						DefaultValueComponentTestEntity.class, id0));
+
+		assert Arrays.asList(1, 2).equals(
+				getAuditReader().getRevisions(
+						DefaultValueComponentTestEntity.class, id1));
+
+		assert Arrays.asList(1, 2).equals(
+				getAuditReader().getRevisions(
+						DefaultValueComponentTestEntity.class, id2));
+
+		assert Arrays.asList(1, 2).equals(
+				getAuditReader().getRevisions(
+						DefaultValueComponentTestEntity.class, id3));
+
+		assert Arrays.asList(1, 2).equals(
+				getAuditReader().getRevisions(
+						DefaultValueComponentTestEntity.class, id4));
+
+		assert Arrays.asList(1, 2).equals(
+				getAuditReader().getRevisions(
+						DefaultValueComponentTestEntity.class, id5));
+
+		assert Arrays.asList(1, 2).equals(
+				getAuditReader().getRevisions(
+						DefaultValueComponentTestEntity.class, id6));
+	}
+
+	@Test
+	public void testHistoryOfId0() {
+
+		DefaultValueComponentTestEntity ent1 = getAuditReader().find(
+				DefaultValueComponentTestEntity.class, id0, 1);
+		DefaultValueComponentTestEntity ent2 = getAuditReader().find(
+				DefaultValueComponentTestEntity.class, id0, 2);
+
+		log.error("------------ id0 -------------");
+		log.error(ent1.toString());
+		log.error(ent2.toString());
+
+		checkCorrectlyPersisted(id0, null, null);
+
+		DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity
+				.of(id0, DefaultValueComponent1.of(null, null));
+		DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity
+				.of(id0, DefaultValueComponent1.of("upd-c1-str1", null));
+
+		assert ent1.equals(expectedVer1);
+		assert ent2.equals(expectedVer2);
+	}
+
+	@Test
+	public void testHistoryOfId1() {
+
+		DefaultValueComponentTestEntity ent1 = getAuditReader().find(
+				DefaultValueComponentTestEntity.class, id1, 1);
+		DefaultValueComponentTestEntity ent2 = getAuditReader().find(
+				DefaultValueComponentTestEntity.class, id1, 2);
+
+		log.error("------------ id1 -------------");
+		log.error(ent1.toString());
+		log.error(ent2.toString());
+
+		checkCorrectlyPersisted(id1, null, "upd-c2-str1");
+
+		DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity
+				.of(id1, DefaultValueComponent1.of("c1-str1", null));
+		DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity
+				.of(id1, DefaultValueComponent1.of(null, DefaultValueComponent2
+						.of("upd-c2-str1", "upd-c2-str2")));
+
+		assert ent2.equals(expectedVer2);
+		assert ent1.equals(expectedVer1);
+	}
+
+	@Test
+	public void testHistoryOfId2() {
+
+		DefaultValueComponentTestEntity ent1 = getAuditReader().find(
+				DefaultValueComponentTestEntity.class, id2, 1);
+		DefaultValueComponentTestEntity ent2 = getAuditReader().find(
+				DefaultValueComponentTestEntity.class, id2, 2);
+
+		log.error("------------ id2 -------------");
+		log.error(ent1.toString());
+		log.error(ent2.toString());
+
+		DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity
+				.of(id2, DefaultValueComponent1.of("c1-str1",
+						DefaultValueComponent2.of("c2-str1", "c2-str2")));
+		DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity
+				.of(id2, DefaultValueComponent1.of("c1-str1",
+						DefaultValueComponent2.of("upd-c2-str1", "c2-str2")));
+
+		assert ent1.equals(expectedVer1);
+		assert ent2.equals(expectedVer2);
+	}
+
+	@Test
+	public void testHistoryOfId3() {
+
+		DefaultValueComponentTestEntity ent1 = getAuditReader().find(
+				DefaultValueComponentTestEntity.class, id3, 1);
+		DefaultValueComponentTestEntity ent2 = getAuditReader().find(
+				DefaultValueComponentTestEntity.class, id3, 2);
+
+		log.error("------------ id3 -------------");
+		log.error(ent1.toString());
+		log.error(ent2.toString());
+
+		DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity
+				.of(id3, DefaultValueComponent1.of(null, DefaultValueComponent2
+						.of("c2-str1", "c2-str2")));
+		DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity
+				.of(id3, DefaultValueComponent1.of(null, DefaultValueComponent2
+						.of("upd-c2-str1", "c2-str2")));
+
+		assert ent1.equals(expectedVer1);
+		assert ent2.equals(expectedVer2);
+	}
+
+	@Test
+	public void testHistoryOfId4() {
+
+		DefaultValueComponentTestEntity ent1 = getAuditReader().find(
+				DefaultValueComponentTestEntity.class, id4, 1);
+		DefaultValueComponentTestEntity ent2 = getAuditReader().find(
+				DefaultValueComponentTestEntity.class, id4, 2);
+
+		log.error("------------ id4 -------------");
+		log.error(ent1.toString());
+		log.error(ent2.toString());
+
+		DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity
+				.of(id4, DefaultValueComponent1.of(null, DefaultValueComponent2
+						.of(null, "c2-str2")));
+		DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity
+				.of(id4, DefaultValueComponent1.of(null, DefaultValueComponent2
+						.of("upd-c2-str1", "c2-str2")));
+
+		assert ent1.equals(expectedVer1);
+		assert ent2.equals(expectedVer2);
+	}
+
+	@Test
+	public void testHistoryOfId5() {
+
+		DefaultValueComponentTestEntity ent1 = getAuditReader().find(
+				DefaultValueComponentTestEntity.class, id5, 1);
+		DefaultValueComponentTestEntity ent2 = getAuditReader().find(
+				DefaultValueComponentTestEntity.class, id5, 2);
+
+		log.error("------------ id5 -------------");
+		log.error(ent1.toString());
+		log.error(ent2.toString());
+
+		DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity
+				.of(id5, DefaultValueComponent1.of(null, DefaultValueComponent2
+						.of("c2-str1", null)));
+		DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity
+				.of(id5, DefaultValueComponent1.of(null, DefaultValueComponent2
+						.of("upd-c2-str1", null)));
+
+		assert ent1.equals(expectedVer1);
+		assert ent2.equals(expectedVer2);
+	}
+
+	@Test
+	public void testHistoryOfId6() {
+
+		DefaultValueComponentTestEntity ent1 = getAuditReader().find(
+				DefaultValueComponentTestEntity.class, id6, 1);
+		DefaultValueComponentTestEntity ent2 = getAuditReader().find(
+				DefaultValueComponentTestEntity.class, id6, 2);
+
+		log.error("------------ id6 -------------");
+		log.error(ent1.toString());
+		log.error(ent2.toString());
+
+		DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity
+				.of(id6, DefaultValueComponent1.of(null, null));
+		DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity
+				.of(id6, DefaultValueComponent1.of(null, DefaultValueComponent2
+						.of("upd-c2-str1", null)));
+
+		assert ent2.equals(expectedVer2);
+		assert ent1.equals(expectedVer1);
+	}
+
+	private void checkCorrectlyPersisted(Integer expectedId,
+			String expectedComp2Str1Rev1, String expectedComp2Str1Rev2) {
+		// Verify that the entity was correctly persisted
+		EntityManager em = getEntityManager();
+		em.getTransaction().begin();
+		Long entCount = (Long) em.createQuery(
+				"select count(s) from DefaultValueComponentTestEntity s where s.id = "
+						+ expectedId.toString()).getSingleResult();
+		BigInteger auditCount = (BigInteger) em.createNativeQuery(
+				"select count(ID) from DefaultValueComponentTestEntity_AUD s where s.id = "
+						+ expectedId.toString()).getSingleResult();
+		String comp2Str1Rev1 = (String) em
+				.createNativeQuery(
+						"select COMP2_STR1 from DefaultValueComponentTestEntity_AUD s where rev=1 and s.id = "
+								+ expectedId.toString()).getSingleResult();
+		String comp2Str1Rev2 = (String) em
+				.createNativeQuery(
+						"select COMP2_STR1 from DefaultValueComponentTestEntity_AUD s where rev=2 and s.id = "
+								+ expectedId.toString()).getSingleResult();
+		assert Long.valueOf(1L).equals(entCount);
+		assert BigInteger.valueOf(2L).equals(auditCount);
+
+		if (expectedComp2Str1Rev1 == null) {
+			assert comp2Str1Rev1 == null;
+		} else {
+			assert expectedComp2Str1Rev1.equals(comp2Str1Rev1);
+		}
+
+		if (expectedComp2Str1Rev2 == null) {
+			assert comp2Str1Rev2 == null;
+		} else {
+			assert expectedComp2Str1Rev2.equals(comp2Str1Rev2);
+		}
+		em.getTransaction().commit();
+	}
+}



More information about the hibernate-commits mailing list