[hibernate-commits] Hibernate SVN: r15868 - in core/branches/envers-hibernate-3.3/src: main/java/org/hibernate/envers/entities and 6 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Tue Feb 3 13:30:11 EST 2009


Author: adamw
Date: 2009-02-03 13:30:11 -0500 (Tue, 03 Feb 2009)
New Revision: 15868

Added:
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/components/relations/NotAuditedManyToOneComponent.java
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/components/relations/NotAuditedManyToOneComponentTestEntity.java
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/accesstype/Country.java
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/accesstype/ImmutableClassAccessType.java
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/components/relations/NotAuditedManyToOneInComponent.java
Modified:
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/metadata/ComponentMetadataGenerator.java
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/EntityInstantiator.java
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/SubclassPropertyMapper.java
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/id/SingleIdMapper.java
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/event/AuditEventListener.java
Log:
svn merge -r 15828:15867 https://svn.jboss.org/repos/hibernate/core/trunk/envers .

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/metadata/ComponentMetadataGenerator.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/metadata/ComponentMetadataGenerator.java	2009-02-03 14:23:14 UTC (rev 15867)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/metadata/ComponentMetadataGenerator.java	2009-02-03 18:30:11 UTC (rev 15868)
@@ -37,9 +37,14 @@
 		while (properties.hasNext()) {
 			Property property = properties.next();
 
-			mainGenerator.addValue(parent, property.getValue(), componentMapper, entityName, xmlMappingData,
-					componentAuditingData.getPropertyAuditingData(property.getName()),
-					property.isInsertable(), firstPass);
+			PropertyAuditingData componentPropertyAuditingData =
+					componentAuditingData.getPropertyAuditingData(property.getName());
+
+			// Checking if that property is audited
+			if (componentPropertyAuditingData != null) {
+				mainGenerator.addValue(parent, property.getValue(), componentMapper, entityName, xmlMappingData,
+						componentPropertyAuditingData, property.isInsertable(), firstPass);
+			}
 		}
 	}
 }

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/EntityInstantiator.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/EntityInstantiator.java	2009-02-03 14:23:14 UTC (rev 15867)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/EntityInstantiator.java	2009-02-03 18:30:11 UTC (rev 15868)
@@ -32,6 +32,7 @@
 import org.hibernate.envers.exception.AuditException;
 import org.hibernate.envers.reader.AuditReaderImplementor;
 import org.hibernate.envers.tools.reflection.ReflectionTools;
+import org.hibernate.util.ReflectHelper;
 
 /**
  * @author Adam Warski (adam at warski dot org)
@@ -80,7 +81,7 @@
         Object ret;
         try {
             Class<?> cls = ReflectionTools.loadClass(entityName);
-            ret = cls.newInstance();
+            ret = ReflectHelper.getDefaultConstructor(cls).newInstance();
         } catch (Exception e) {
             throw new AuditException(e);
         }

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/SubclassPropertyMapper.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/SubclassPropertyMapper.java	2009-02-03 14:23:14 UTC (rev 15867)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/SubclassPropertyMapper.java	2009-02-03 18:30:11 UTC (rev 15868)
@@ -79,7 +79,9 @@
         if (parentCollectionChanges == null) {
             return mainCollectionChanges;
         } else {
-            parentCollectionChanges.addAll(mainCollectionChanges);
+        	if(mainCollectionChanges != null) {
+                parentCollectionChanges.addAll(mainCollectionChanges);
+        	}
 			return parentCollectionChanges;
         }
     }

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/id/SingleIdMapper.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/id/SingleIdMapper.java	2009-02-03 14:23:14 UTC (rev 15867)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/entities/mapper/id/SingleIdMapper.java	2009-02-03 18:30:11 UTC (rev 15868)
@@ -33,6 +33,7 @@
 
 import org.hibernate.property.Getter;
 import org.hibernate.property.Setter;
+import org.hibernate.proxy.HibernateProxy;
 
 /**
  * @author Adam Warski (adam at warski dot org)
@@ -77,8 +78,13 @@
             return null;
         }
 
-        Getter getter = ReflectionTools.getGetter(data.getClass(), propertyData);
-        return getter.get(data);
+        if(data instanceof HibernateProxy) {
+        	HibernateProxy hibernateProxy = (HibernateProxy) data;
+        	return hibernateProxy.getHibernateLazyInitializer().getIdentifier();
+        } else {
+        	Getter getter = ReflectionTools.getGetter(data.getClass(), propertyData);
+            return getter.get(data);
+        }
     }
 
     public void mapToMapFromId(Map<String, Object> data, Object obj) {
@@ -91,8 +97,13 @@
         if (obj == null) {
             data.put(propertyData.getName(), null);
         } else {
-            Getter getter = ReflectionTools.getGetter(obj.getClass(), propertyData);
-            data.put(propertyData.getName(), getter.get(obj));
+            if(obj instanceof HibernateProxy) {
+            	HibernateProxy hibernateProxy = (HibernateProxy)obj;
+            	data.put(propertyData.getName(), hibernateProxy.getHibernateLazyInitializer().getIdentifier());
+            } else {
+            	Getter getter = ReflectionTools.getGetter(obj.getClass(), propertyData);
+            	data.put(propertyData.getName(), getter.get(obj));
+            }
         }
     }
 

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/event/AuditEventListener.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/event/AuditEventListener.java	2009-02-03 14:23:14 UTC (rev 15867)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/event/AuditEventListener.java	2009-02-03 18:30:11 UTC (rev 15868)
@@ -57,6 +57,7 @@
 import org.hibernate.event.PreCollectionUpdateEvent;
 import org.hibernate.event.PreCollectionUpdateEventListener;
 import org.hibernate.persister.entity.EntityPersister;
+import org.hibernate.proxy.HibernateProxy;
 
 /**
  * @author Adam Warski (adam at warski dot org)
@@ -64,6 +65,8 @@
 public class AuditEventListener implements PostInsertEventListener, PostUpdateEventListener,
         PostDeleteEventListener, PreCollectionUpdateEventListener, PreCollectionRemoveEventListener,
         PostCollectionRecreateEventListener, Initializable {
+	private static final long serialVersionUID = -2499904286323112715L;
+
     private AuditConfiguration verCfg;
 
     private void generateBidirectionalCollectionChangeWorkUnits(AuditSync verSync, EntityPersister entityPersister,
@@ -93,7 +96,14 @@
                     if (newValue != null) {
                         // relDesc.getToEntityName() doesn't always return the entity name of the value - in case
                         // of subclasses, this will be root class, no the actual class. So it can't be used here.
-                        String toEntityName = session.guessEntityName(newValue);
+                        String toEntityName;
+                        if(newValue instanceof HibernateProxy) {
+                    	    HibernateProxy hibernateProxy = (HibernateProxy) newValue;
+                    	    toEntityName = session.bestGuessEntityName(newValue);
+                    	    newValue = hibernateProxy.getHibernateLazyInitializer().getImplementation();
+                    	} else {
+                    		toEntityName =  session.guessEntityName(newValue);
+                    	}
 
                         IdMapper idMapper = verCfg.getEntCfg().get(toEntityName).getIdMapper();
 
@@ -102,8 +112,15 @@
                     }
 
                     if (oldValue != null) {
-                        String toEntityName = session.guessEntityName(oldValue);
-
+                    	String toEntityName;
+                    	if(oldValue instanceof HibernateProxy) {
+                    	    HibernateProxy hibernateProxy = (HibernateProxy) oldValue;
+                    	    toEntityName = session.bestGuessEntityName(oldValue);
+                    	    oldValue = hibernateProxy.getHibernateLazyInitializer().getImplementation();
+                    	} else {
+                    		toEntityName =  session.guessEntityName(oldValue);
+                    	}
+                        
                         IdMapper idMapper = verCfg.getEntCfg().get(toEntityName).getIdMapper();
 
                         Serializable id = (Serializable) idMapper.mapToIdFromEntity(oldValue);

Copied: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/components/relations/NotAuditedManyToOneComponent.java (from rev 15867, core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/components/relations/NotAuditedManyToOneComponent.java)
===================================================================
--- core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/components/relations/NotAuditedManyToOneComponent.java	                        (rev 0)
+++ core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/components/relations/NotAuditedManyToOneComponent.java	2009-02-03 18:30:11 UTC (rev 15868)
@@ -0,0 +1,90 @@
+/*
+ * 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.relations;
+
+import org.hibernate.envers.test.entities.UnversionedStrTestEntity;
+import org.hibernate.envers.NotAudited;
+
+import javax.persistence.ManyToOne;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+ at Embeddable
+public class NotAuditedManyToOneComponent {
+	@ManyToOne
+	@NotAudited
+    private UnversionedStrTestEntity entity;
+
+    private String data;
+
+	public NotAuditedManyToOneComponent(UnversionedStrTestEntity entity, String data) {
+        this.entity = entity;
+        this.data = data;
+    }
+
+    public NotAuditedManyToOneComponent() {
+    }
+
+	public String getData() {
+        return data;
+    }
+
+    public void setData(String data) {
+        this.data = data;
+    }
+
+	public UnversionedStrTestEntity getEntity() {
+		return entity;
+	}
+
+	public void setEntity(UnversionedStrTestEntity entity) {
+		this.entity = entity;
+	}
+
+	@Override
+	public boolean equals(Object o) {
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+
+		NotAuditedManyToOneComponent that = (NotAuditedManyToOneComponent) o;
+
+		if (data != null ? !data.equals(that.data) : that.data != null) return false;
+		if (entity != null ? !entity.equals(that.entity) : that.entity != null) return false;
+
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = entity != null ? entity.hashCode() : 0;
+		result = 31 * result + (data != null ? data.hashCode() : 0);
+		return result;
+	}
+
+	public String toString() {
+        return "NotAuditedManyToOneComponent(str1 = " + data + ")";
+    }
+}
\ No newline at end of file

Copied: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/components/relations/NotAuditedManyToOneComponentTestEntity.java (from rev 15867, core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/components/relations/NotAuditedManyToOneComponentTestEntity.java)
===================================================================
--- core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/components/relations/NotAuditedManyToOneComponentTestEntity.java	                        (rev 0)
+++ core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/components/relations/NotAuditedManyToOneComponentTestEntity.java	2009-02-03 18:30:11 UTC (rev 15868)
@@ -0,0 +1,97 @@
+/*
+ * 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.relations;
+
+import javax.persistence.Embedded;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.envers.Audited;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+ at Entity
+public class NotAuditedManyToOneComponentTestEntity {
+    @Id
+    @GeneratedValue
+    private Integer id;
+
+    @Embedded
+    @Audited
+    private NotAuditedManyToOneComponent comp1;
+
+    public NotAuditedManyToOneComponentTestEntity() {
+    }
+
+    public NotAuditedManyToOneComponentTestEntity(Integer id, NotAuditedManyToOneComponent comp1) {
+        this.id = id;
+        this.comp1 = comp1;
+    }
+
+    public NotAuditedManyToOneComponentTestEntity(NotAuditedManyToOneComponent comp1) {
+        this.comp1 = comp1;
+    }
+
+	public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public NotAuditedManyToOneComponent getComp1() {
+        return comp1;
+    }
+
+    public void setComp1(NotAuditedManyToOneComponent comp1) {
+        this.comp1 = comp1;
+    }
+
+	@Override
+	public boolean equals(Object o) {
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+
+		NotAuditedManyToOneComponentTestEntity that = (NotAuditedManyToOneComponentTestEntity) 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;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = id != null ? id.hashCode() : 0;
+		result = 31 * result + (comp1 != null ? comp1.hashCode() : 0);
+		return result;
+	}
+
+	public String toString() {
+        return "NAMTOCTE(id = " + id + ", comp1 = " + comp1 + ")";
+    }
+}
\ No newline at end of file

Copied: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/accesstype/Country.java (from rev 15867, core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/accesstype/Country.java)
===================================================================
--- core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/accesstype/Country.java	                        (rev 0)
+++ core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/accesstype/Country.java	2009-02-03 18:30:11 UTC (rev 15868)
@@ -0,0 +1,72 @@
+package org.hibernate.envers.test.integration.accesstype;
+
+import org.hibernate.envers.Audited;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+ at Entity
+ at Audited
+public class Country {
+	@Id
+	@Column(length = 4)
+	private Integer code;
+
+	@Column(length = 40)
+	private String name;
+
+	/**
+	 * Default constructor for persistence provider.
+	 */
+	@SuppressWarnings({"UnusedDeclaration"})
+	private Country() { }
+
+	private Country(Integer code, String naam) {
+		this.code = code;
+		this.name = naam;
+	}
+
+	public Integer getCode() {
+		return code;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public static Country of(Integer code, String name) {
+		return new Country(code, name);
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((code == null) ? 0 : code.hashCode());
+		result = prime * result + ((name == null) ? 0 : name.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		Country other = (Country) obj;
+		if (code == null) {
+			if (other.code != null)
+				return false;
+		} else if (!code.equals(other.code))
+			return false;
+		if (name == null) {
+			if (other.name != null)
+				return false;
+		} else if (!name.equals(other.name))
+			return false;
+		return true;
+	}
+}

Copied: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/accesstype/ImmutableClassAccessType.java (from rev 15867, core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/accesstype/ImmutableClassAccessType.java)
===================================================================
--- core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/accesstype/ImmutableClassAccessType.java	                        (rev 0)
+++ core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/accesstype/ImmutableClassAccessType.java	2009-02-03 18:30:11 UTC (rev 15868)
@@ -0,0 +1,50 @@
+package org.hibernate.envers.test.integration.accesstype;
+
+import java.util.Arrays;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.ejb.Ejb3Configuration;
+import org.hibernate.envers.test.AbstractEntityTest;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import static org.testng.Assert.assertEquals;
+
+public class ImmutableClassAccessType extends AbstractEntityTest {
+	private Country country;
+
+	public void configure(Ejb3Configuration cfg) {
+		cfg.addAnnotatedClass(Country.class);
+	}
+
+	@BeforeClass(dependsOnMethods = "init")
+	public void initData() {
+		EntityManager em = getEntityManager();
+
+		// Revision 1
+		em.getTransaction().begin();
+		country = Country.of(123, "Germany");
+		em.persist(country);
+		em.getTransaction().commit();
+
+	}
+
+	@Test
+	public void testRevisionsCounts() {
+		assert Arrays.asList(1)
+				.equals(
+						getAuditReader().getRevisions(Country.class,
+								country.getCode()));
+	}
+
+	@Test
+	public void testHistoryOfId1() {
+		Country country1 = getEntityManager().find(Country.class,
+				country.getCode());
+		assertEquals(country1, country);
+
+		Country history = getAuditReader().find(Country.class, country1.getCode(), 1);
+		assertEquals(country, history);
+	}
+
+}
\ No newline at end of file

Copied: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/components/relations/NotAuditedManyToOneInComponent.java (from rev 15867, core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/components/relations/NotAuditedManyToOneInComponent.java)
===================================================================
--- core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/components/relations/NotAuditedManyToOneInComponent.java	                        (rev 0)
+++ core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/components/relations/NotAuditedManyToOneInComponent.java	2009-02-03 18:30:11 UTC (rev 15868)
@@ -0,0 +1,113 @@
+/*
+ * 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.relations;
+
+import java.util.Arrays;
+import javax.persistence.EntityManager;
+
+import org.hibernate.envers.test.AbstractEntityTest;
+import org.hibernate.envers.test.entities.components.relations.NotAuditedManyToOneComponentTestEntity;
+import org.hibernate.envers.test.entities.components.relations.NotAuditedManyToOneComponent;
+import org.hibernate.envers.test.entities.UnversionedStrTestEntity;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import org.hibernate.ejb.Ejb3Configuration;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class NotAuditedManyToOneInComponent extends AbstractEntityTest {
+    private Integer mtocte_id1;
+
+    public void configure(Ejb3Configuration cfg) {
+        cfg.addAnnotatedClass(NotAuditedManyToOneComponentTestEntity.class);
+		cfg.addAnnotatedClass(UnversionedStrTestEntity.class);
+    }
+
+    @BeforeClass(dependsOnMethods = "init")
+    public void initData() {
+		// No revision
+        EntityManager em = getEntityManager();
+        em.getTransaction().begin();
+
+		UnversionedStrTestEntity ste1 = new UnversionedStrTestEntity();
+        ste1.setStr("str1");
+
+		UnversionedStrTestEntity ste2 = new UnversionedStrTestEntity();
+        ste2.setStr("str2");
+
+        em.persist(ste1);
+		em.persist(ste2);
+
+        em.getTransaction().commit();
+
+        // Revision 1
+        em = getEntityManager();
+        em.getTransaction().begin();
+
+		NotAuditedManyToOneComponentTestEntity mtocte1 = new NotAuditedManyToOneComponentTestEntity(
+				new NotAuditedManyToOneComponent(ste1, "data1"));
+
+		em.persist(mtocte1);
+
+        em.getTransaction().commit();
+
+        // No revision
+        em = getEntityManager();
+        em.getTransaction().begin();
+
+        mtocte1 = em.find(NotAuditedManyToOneComponentTestEntity.class, mtocte1.getId());
+        mtocte1.getComp1().setEntity(ste2);
+
+        em.getTransaction().commit();
+
+        // Revision 2
+        em = getEntityManager();
+        em.getTransaction().begin();
+
+        mtocte1 = em.find(NotAuditedManyToOneComponentTestEntity.class, mtocte1.getId());
+        mtocte1.getComp1().setData("data2");
+
+        em.getTransaction().commit();
+
+        mtocte_id1 = mtocte1.getId();
+    }
+
+    @Test
+    public void testRevisionsCounts() {
+        assert Arrays.asList(1, 2).equals(getAuditReader().getRevisions(NotAuditedManyToOneComponentTestEntity.class, mtocte_id1));
+    }
+
+    @Test
+    public void testHistoryOfId1() {
+		NotAuditedManyToOneComponentTestEntity ver1 = new NotAuditedManyToOneComponentTestEntity(mtocte_id1,
+				new NotAuditedManyToOneComponent(null, "data1"));
+		NotAuditedManyToOneComponentTestEntity ver2 = new NotAuditedManyToOneComponentTestEntity(mtocte_id1,
+				new NotAuditedManyToOneComponent(null, "data2"));
+
+        assert getAuditReader().find(NotAuditedManyToOneComponentTestEntity.class, mtocte_id1, 1).equals(ver1);
+        assert getAuditReader().find(NotAuditedManyToOneComponentTestEntity.class, mtocte_id1, 2).equals(ver2);
+    }
+}
\ No newline at end of file




More information about the hibernate-commits mailing list