[hibernate-commits] Hibernate SVN: r18827 - in core/trunk/envers/src: test/java/org/hibernate/envers/test/entities/ids and 1 other directories.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Thu Feb 18 04:17:25 EST 2010
Author: adamw
Date: 2010-02-18 04:17:24 -0500 (Thu, 18 Feb 2010)
New Revision: 18827
Added:
core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/ids/ManyToOneIdNotAuditedTestEntity.java
core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/ids/ManyToOneNotAuditedEmbId.java
core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/ids/ManyToOneIdNotAudited.java
Modified:
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/metadata/AuditMetadataGenerator.java
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/metadata/IdMetadataGenerator.java
Log:
HHH-4928:
- using unsupported constructs in ids of non-audited entities doesn't cause an exception
Modified: core/trunk/envers/src/main/java/org/hibernate/envers/configuration/metadata/AuditMetadataGenerator.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/configuration/metadata/AuditMetadataGenerator.java 2010-02-18 05:07:20 UTC (rev 18826)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/configuration/metadata/AuditMetadataGenerator.java 2010-02-18 09:17:24 UTC (rev 18827)
@@ -345,7 +345,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
@@ -375,7 +375,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.get(pc);
Modified: core/trunk/envers/src/main/java/org/hibernate/envers/configuration/metadata/IdMetadataGenerator.java
===================================================================
--- core/trunk/envers/src/main/java/org/hibernate/envers/configuration/metadata/IdMetadataGenerator.java 2010-02-18 05:07:20 UTC (rev 18826)
+++ core/trunk/envers/src/main/java/org/hibernate/envers/configuration/metadata/IdMetadataGenerator.java 2010-02-18 09:17:24 UTC (rev 18827)
@@ -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
Added: core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/ids/ManyToOneIdNotAuditedTestEntity.java
===================================================================
--- core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/ids/ManyToOneIdNotAuditedTestEntity.java (rev 0)
+++ core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/ids/ManyToOneIdNotAuditedTestEntity.java 2010-02-18 09:17:24 UTC (rev 18827)
@@ -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;
+ }
+}
Added: core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/ids/ManyToOneNotAuditedEmbId.java
===================================================================
--- core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/ids/ManyToOneNotAuditedEmbId.java (rev 0)
+++ core/trunk/envers/src/test/java/org/hibernate/envers/test/entities/ids/ManyToOneNotAuditedEmbId.java 2010-02-18 09:17:24 UTC (rev 18827)
@@ -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;
+ }
+}
Added: core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/ids/ManyToOneIdNotAudited.java
===================================================================
--- core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/ids/ManyToOneIdNotAudited.java (rev 0)
+++ core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/ids/ManyToOneIdNotAudited.java 2010-02-18 09:17:24 UTC (rev 18827)
@@ -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