[hibernate-commits] Hibernate SVN: r18830 - in core/branches/envers-hibernate-3.3/src: main/java/org/hibernate/envers/configuration/metadata and 2 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Feb 18 04:29:31 EST 2010


Author: adamw
Date: 2010-02-18 04:29:30 -0500 (Thu, 18 Feb 2010)
New Revision: 18830

Added:
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/ids/ManyToOneIdNotAuditedTestEntity.java
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/ids/ManyToOneNotAuditedEmbId.java
   core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/ids/ManyToOneIdNotAudited.java
Modified:
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/EntitiesConfigurator.java
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/metadata/AuditMetadataGenerator.java
   core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/metadata/IdMetadataGenerator.java
Log:
svn merge -r 18791:18829 https://svn.jboss.org/repos/hibernate/core/trunk/envers .

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/EntitiesConfigurator.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/EntitiesConfigurator.java	2010-02-18 09:21:17 UTC (rev 18829)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/EntitiesConfigurator.java	2010-02-18 09:29:30 UTC (rev 18830)
@@ -84,7 +84,7 @@
         classesAuditingData.updateCalculatedFields();
 
         AuditMetadataGenerator auditMetaGen = new AuditMetadataGenerator(cfg, globalCfg, verEntCfg,
-                revisionInfoRelationMapping, auditEntityNameRegister, classesAuditingData);
+                revisionInfoRelationMapping, auditEntityNameRegister);
 
         // First pass
         for (Map.Entry<PersistentClass, ClassAuditingData> pcDatasEntry : classesAuditingData.getAllClassAuditedData()) {

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/metadata/AuditMetadataGenerator.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/metadata/AuditMetadataGenerator.java	2010-02-18 09:21:17 UTC (rev 18829)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/metadata/AuditMetadataGenerator.java	2010-02-18 09:29:30 UTC (rev 18830)
@@ -30,7 +30,6 @@
 import org.dom4j.Element;
 import org.hibernate.envers.configuration.GlobalConfiguration;
 import org.hibernate.envers.configuration.AuditEntitiesConfiguration;
-import org.hibernate.envers.configuration.ClassesAuditingData;
 import org.hibernate.envers.configuration.metadata.reader.ClassAuditingData;
 import org.hibernate.envers.configuration.metadata.reader.PropertyAuditingData;
 import org.hibernate.envers.entities.EntityConfiguration;
@@ -78,7 +77,6 @@
     private final Map<String, EntityConfiguration> notAuditedEntitiesConfigurations;
 
     private final AuditEntityNameRegister auditEntityNameRegister;
-    private final ClassesAuditingData classesAuditingData;
 
     // Map entity name -> (join descriptor -> element describing the "versioned" join)
     private final Map<String, Map<Join, Element>> entitiesJoins;
@@ -86,8 +84,7 @@
     public AuditMetadataGenerator(Configuration cfg, GlobalConfiguration globalCfg,
                                   AuditEntitiesConfiguration verEntCfg,
                                   Element revisionInfoRelationMapping,
-                                  AuditEntityNameRegister auditEntityNameRegister,
-                                  ClassesAuditingData classesAuditingData) {
+                                  AuditEntityNameRegister auditEntityNameRegister) {
         this.cfg = cfg;
         this.globalCfg = globalCfg;
         this.verEntCfg = verEntCfg;
@@ -98,8 +95,7 @@
         this.idMetadataGenerator = new IdMetadataGenerator(this);
         this.toOneRelationMetadataGenerator = new ToOneRelationMetadataGenerator(this);
 
-        this.auditEntityNameRegister = auditEntityNameRegister;        
-        this.classesAuditingData = classesAuditingData;
+        this.auditEntityNameRegister = auditEntityNameRegister;
 
         entitiesConfigurations = new HashMap<String, EntityConfiguration>();
         notAuditedEntitiesConfigurations = new HashMap<String, EntityConfiguration>();
@@ -377,7 +373,7 @@
 
 		if (!isAudited) {
 			String entityName = pc.getEntityName();
-			IdMappingData idMapper = idMetadataGenerator.addId(pc);
+			IdMappingData idMapper = idMetadataGenerator.addId(pc, false);
 
             if (idMapper == null) {
                 // Unsupported id mapping, e.g. key-many-to-one. If the entity is used in auditing, an exception
@@ -407,7 +403,7 @@
         AuditTableData auditTableData = new AuditTableData(auditEntityName, auditTableName, schema, catalog);
 
         // Generating a mapping for the id
-        IdMappingData idMapper = idMetadataGenerator.addId(pc);
+        IdMappingData idMapper = idMetadataGenerator.addId(pc, true);
 
         InheritanceType inheritanceType = InheritanceType.getForChild(pc);
 
@@ -495,10 +491,6 @@
         return entitiesConfigurations;
     }
 
-    public ClassesAuditingData getClassesAuditingData() {
-        return classesAuditingData;
-    }
-
     // Getters for generators and configuration
 
     BasicMetadataGenerator getBasicMetadataGenerator() {

Modified: core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/metadata/IdMetadataGenerator.java
===================================================================
--- core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/metadata/IdMetadataGenerator.java	2010-02-18 09:21:17 UTC (rev 18829)
+++ core/branches/envers-hibernate-3.3/src/main/java/org/hibernate/envers/configuration/metadata/IdMetadataGenerator.java	2010-02-18 09:29:30 UTC (rev 18830)
@@ -56,7 +56,8 @@
     }
 
     @SuppressWarnings({"unchecked"})
-    private void addIdProperties(Element parent, Iterator<Property> properties, SimpleMapperBuilder mapper, boolean key) {
+    private boolean addIdProperties(Element parent, Iterator<Property> properties, SimpleMapperBuilder mapper, boolean key,
+                                    boolean audited) {
         while (properties.hasNext()) {
             Property property = properties.next();
             Type propertyType = property.getType();
@@ -67,14 +68,23 @@
                         property.getValue(), mapper, true, key);
 
                 if (!added) {
-                    throw new MappingException("Type not supported: " + propertyType.getClass().getName());
+                    // If the entity is audited, and a non-supported id component is used, throwing an exception.
+                    // If the entity is not audited, then we simply don't support this entity, even in
+                    // target relation mode not audited.
+                    if (audited) {
+                        throw new MappingException("Type not supported: " + propertyType.getClass().getName());
+                    } else {
+                        return false;
+                    }
                 }
             }
         }
+
+        return true;
     }
 
     @SuppressWarnings({"unchecked"})
-    IdMappingData addId(PersistentClass pc) {
+    IdMappingData addId(PersistentClass pc, boolean audited) {
         // Xml mapping which will be used for relations
         Element rel_id_mapping = new DefaultElement("properties");
         // Xml mapping which will be used for the primary key of the versions table
@@ -93,20 +103,28 @@
             // Multiple id
 
             mapper = new MultipleIdMapper(((Component) pc.getIdentifier()).getComponentClassName());
-            addIdProperties(rel_id_mapping, (Iterator<Property>) id_mapper.getPropertyIterator(), mapper, false);
+            if (!addIdProperties(rel_id_mapping, (Iterator<Property>) id_mapper.getPropertyIterator(), mapper, false, audited)) {
+                return null;
+            }
 
             // null mapper - the mapping where already added the first time, now we only want to generate the xml
-            addIdProperties(orig_id_mapping, (Iterator<Property>) id_mapper.getPropertyIterator(), null, true);
+            if (!addIdProperties(orig_id_mapping, (Iterator<Property>) id_mapper.getPropertyIterator(), null, true, audited)) {
+                return null;
+            }
         } else if (id_prop.isComposite()) {
             // Embedded id
 
             Component id_component = (Component) id_prop.getValue();
 
             mapper = new EmbeddedIdMapper(getIdPropertyData(id_prop), id_component.getComponentClassName());
-            addIdProperties(rel_id_mapping, (Iterator<Property>) id_component.getPropertyIterator(), mapper, false);
+            if (!addIdProperties(rel_id_mapping, (Iterator<Property>) id_component.getPropertyIterator(), mapper, false, audited)) {
+                return null;
+            }
 
             // null mapper - the mapping where already added the first time, now we only want to generate the xml
-            addIdProperties(orig_id_mapping, (Iterator<Property>) id_component.getPropertyIterator(), null, true);
+            if (!addIdProperties(orig_id_mapping, (Iterator<Property>) id_component.getPropertyIterator(), null, true, audited)) {
+                return null;
+            }
         } else {
             // Single id
             

Copied: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/ids/ManyToOneIdNotAuditedTestEntity.java (from rev 18829, core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/ids/ManyToOneIdNotAuditedTestEntity.java)
===================================================================
--- core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/ids/ManyToOneIdNotAuditedTestEntity.java	                        (rev 0)
+++ core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/ids/ManyToOneIdNotAuditedTestEntity.java	2010-02-18 09:29:30 UTC (rev 18830)
@@ -0,0 +1,55 @@
+package org.hibernate.envers.test.entities.ids;
+
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import java.io.Serializable;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+ at Entity
+public class ManyToOneIdNotAuditedTestEntity implements Serializable {
+    @EmbeddedId
+    private ManyToOneNotAuditedEmbId id;
+
+    private String data;
+
+    public ManyToOneIdNotAuditedTestEntity() {
+    }
+
+    public ManyToOneNotAuditedEmbId getId() {
+        return id;
+    }
+
+    public void setId(ManyToOneNotAuditedEmbId id) {
+        this.id = id;
+    }
+
+    public String getData() {
+        return data;
+    }
+
+    public void setData(String data) {
+        this.data = data;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ManyToOneIdNotAuditedTestEntity that = (ManyToOneIdNotAuditedTestEntity) o;
+
+        if (data != null ? !data.equals(that.data) : that.data != 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 + (data != null ? data.hashCode() : 0);
+        return result;
+    }
+}

Copied: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/ids/ManyToOneNotAuditedEmbId.java (from rev 18829, core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/ids/ManyToOneNotAuditedEmbId.java)
===================================================================
--- core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/ids/ManyToOneNotAuditedEmbId.java	                        (rev 0)
+++ core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/entities/ids/ManyToOneNotAuditedEmbId.java	2010-02-18 09:29:30 UTC (rev 18830)
@@ -0,0 +1,48 @@
+package org.hibernate.envers.test.entities.ids;
+
+import org.hibernate.envers.test.entities.UnversionedStrTestEntity;
+
+import javax.persistence.Embeddable;
+import javax.persistence.ManyToOne;
+import java.io.Serializable;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+ at Embeddable
+public class ManyToOneNotAuditedEmbId implements Serializable {
+    @ManyToOne
+    private UnversionedStrTestEntity id;
+
+    public ManyToOneNotAuditedEmbId() {
+    }
+
+    public ManyToOneNotAuditedEmbId(UnversionedStrTestEntity id) {
+        this.id = id;
+    }
+
+    public UnversionedStrTestEntity getId() {
+        return id;
+    }
+
+    public void setId(UnversionedStrTestEntity id) {
+        this.id = id;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ManyToOneNotAuditedEmbId that = (ManyToOneNotAuditedEmbId) o;
+
+        if (id != null ? !id.equals(that.id) : that.id != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        return id != null ? id.hashCode() : 0;
+    }
+}

Copied: core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/ids/ManyToOneIdNotAudited.java (from rev 18829, core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/ids/ManyToOneIdNotAudited.java)
===================================================================
--- core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/ids/ManyToOneIdNotAudited.java	                        (rev 0)
+++ core/branches/envers-hibernate-3.3/src/test/java/org/hibernate/envers/test/integration/ids/ManyToOneIdNotAudited.java	2010-02-18 09:29:30 UTC (rev 18830)
@@ -0,0 +1,52 @@
+package org.hibernate.envers.test.integration.ids;
+
+import org.hibernate.ejb.Ejb3Configuration;
+import org.hibernate.envers.test.AbstractEntityTest;
+import org.hibernate.envers.test.entities.StrTestEntity;
+import org.hibernate.envers.test.entities.UnversionedStrTestEntity;
+import org.hibernate.envers.test.entities.ids.ManyToOneIdNotAuditedTestEntity;
+import org.hibernate.envers.test.entities.ids.ManyToOneNotAuditedEmbId;
+import org.testng.annotations.Test;
+
+import javax.persistence.EntityManager;
+
+/**
+ * A test checking that when using Envers it is possible to have non-audited entities that use unsupported
+ * components in their ids, e.g. a many-to-one join to another entity.
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class ManyToOneIdNotAudited extends AbstractEntityTest {
+    private ManyToOneNotAuditedEmbId id1;
+
+    public void configure(Ejb3Configuration cfg) {
+        cfg.addAnnotatedClass(ManyToOneIdNotAuditedTestEntity.class);
+        cfg.addAnnotatedClass(UnversionedStrTestEntity.class);
+        cfg.addAnnotatedClass(StrTestEntity.class);
+    }
+
+    @Test
+    public void initData() {
+        // Revision 1
+        EntityManager em = getEntityManager();
+        em.getTransaction().begin();
+
+        UnversionedStrTestEntity uste = new UnversionedStrTestEntity();
+        uste.setStr("test1");
+        em.persist(uste);
+
+        id1 = new ManyToOneNotAuditedEmbId(uste);
+
+        em.getTransaction().commit();
+
+        // Revision 2
+        em = getEntityManager();
+        em.getTransaction().begin();
+
+        ManyToOneIdNotAuditedTestEntity mtoinate = new ManyToOneIdNotAuditedTestEntity();
+        mtoinate.setData("data1");
+        mtoinate.setId(id1);
+        em.persist(mtoinate);
+
+        em.getTransaction().commit();
+    }
+}



More information about the hibernate-commits mailing list