HHH-3740: fix with test

Thanks for the test to Erik-Berndt Scheper

git-svn-id: https://svn.jboss.org/repos/hibernate/core/trunk@15836 1b8cb986-b30d-0410-93ca-fae66ebed9b2
This commit is contained in:
Adam Warski 2009-01-30 13:38:07 +00:00
parent 1a1118c0bb
commit 5e77669afd
5 changed files with 309 additions and 4 deletions

View File

@ -37,9 +37,14 @@ public final class ComponentMetadataGenerator {
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);
}
}
}
}

View File

@ -46,7 +46,7 @@ public class PersistentCollectionChangeWorkUnit extends AbstractAuditWorkUnit im
Serializable snapshot, Serializable id) {
super(entityName, verCfg, null);
referencingPropertyName = role.substring(role.lastIndexOf(".") + 1);
referencingPropertyName = role.substring(entityName.length() + 1);
collectionChanges = verCfg.getEntCfg().get(getEntityName()).getPropertyMapper()
.mapCollectionChanges(referencingPropertyName, collection, snapshot, id);

View File

@ -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)
*/
@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 + ")";
}
}

View File

@ -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)
*/
@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 + ")";
}
}

View File

@ -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);
}
}