[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