HHH-5288:
- applying patch by Erik-Berndt Scheper - thanks! - Envers auditReader.find() returns wrong data for embedded components using fields with default values git-svn-id: https://svn.jboss.org/repos/hibernate/core/trunk@19750 1b8cb986-b30d-0410-93ca-fae66ebed9b2
This commit is contained in:
parent
ef90b00b14
commit
704503eea2
|
@ -27,16 +27,15 @@ import java.io.Serializable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.hibernate.envers.entities.PropertyData;
|
import org.hibernate.collection.PersistentCollection;
|
||||||
|
import org.hibernate.engine.SessionImplementor;
|
||||||
import org.hibernate.envers.configuration.AuditConfiguration;
|
import org.hibernate.envers.configuration.AuditConfiguration;
|
||||||
|
import org.hibernate.envers.entities.PropertyData;
|
||||||
import org.hibernate.envers.exception.AuditException;
|
import org.hibernate.envers.exception.AuditException;
|
||||||
import org.hibernate.envers.reader.AuditReaderImplementor;
|
import org.hibernate.envers.reader.AuditReaderImplementor;
|
||||||
import org.hibernate.envers.tools.reflection.ReflectionTools;
|
import org.hibernate.envers.tools.reflection.ReflectionTools;
|
||||||
|
|
||||||
import org.hibernate.collection.PersistentCollection;
|
|
||||||
import org.hibernate.property.Setter;
|
import org.hibernate.property.Setter;
|
||||||
import org.hibernate.util.ReflectHelper;
|
import org.hibernate.util.ReflectHelper;
|
||||||
import org.hibernate.engine.SessionImplementor;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Adam Warski (adam at warski dot org)
|
* @author Adam Warski (adam at warski dot org)
|
||||||
|
@ -84,8 +83,11 @@ public class ComponentPropertyMapper implements PropertyMapper, CompositeMapperB
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// And we don't have to set anything on the object - the default value is null
|
if (allNullAndSingle) {
|
||||||
if (!allNullAndSingle) {
|
// single property, but default value need not be null, so we'll set it to null anyway
|
||||||
|
setter.set(obj, null, null);
|
||||||
|
} else {
|
||||||
|
// set the component
|
||||||
try {
|
try {
|
||||||
Object subObj = ReflectHelper.getDefaultConstructor(
|
Object subObj = ReflectHelper.getDefaultConstructor(
|
||||||
Thread.currentThread().getContextClassLoader().loadClass(componentClassName)).newInstance();
|
Thread.currentThread().getContextClassLoader().loadClass(componentClassName)).newInstance();
|
||||||
|
@ -97,7 +99,7 @@ public class ComponentPropertyMapper implements PropertyMapper, CompositeMapperB
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<PersistentCollectionChangeData> mapCollectionChanges(String referencingPropertyName,
|
public List<PersistentCollectionChangeData> mapCollectionChanges(String referencingPropertyName,
|
||||||
PersistentCollection newColl,
|
PersistentCollection newColl,
|
||||||
Serializable oldColl,
|
Serializable oldColl,
|
||||||
Serializable id) {
|
Serializable id) {
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
package org.hibernate.envers.test.entities.components;
|
||||||
|
|
||||||
|
import javax.persistence.Embedded;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Erik-Berndt Scheper
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class DefaultValueComponent1 {
|
||||||
|
|
||||||
|
private String str1;
|
||||||
|
|
||||||
|
@Embedded
|
||||||
|
private DefaultValueComponent2 comp2 = new DefaultValueComponent2();
|
||||||
|
|
||||||
|
public static final DefaultValueComponent1 of(String str1,
|
||||||
|
DefaultValueComponent2 comp2) {
|
||||||
|
DefaultValueComponent1 instance = new DefaultValueComponent1();
|
||||||
|
instance.setStr1(str1);
|
||||||
|
instance.setComp2(comp2);
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStr1() {
|
||||||
|
return str1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStr1(String str1) {
|
||||||
|
this.str1 = str1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DefaultValueComponent2 getComp2() {
|
||||||
|
return comp2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setComp2(DefaultValueComponent2 comp2) {
|
||||||
|
this.comp2 = comp2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o)
|
||||||
|
return true;
|
||||||
|
if (!(o instanceof DefaultValueComponent1))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
DefaultValueComponent1 that = (DefaultValueComponent1) o;
|
||||||
|
|
||||||
|
if (str1 != null ? !str1.equals(that.str1) : that.str1 != null)
|
||||||
|
return false;
|
||||||
|
if (comp2 != null ? !comp2.equals(that.comp2) : that.comp2 != null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int hashCode() {
|
||||||
|
int result;
|
||||||
|
result = (str1 != null ? str1.hashCode() : 0);
|
||||||
|
result = 31 * result + (comp2 != null ? comp2.hashCode() : 0);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return "Comp1(str1 = " + str1 + ", comp2 = " + comp2 + ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,64 @@
|
||||||
|
package org.hibernate.envers.test.entities.components;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Erik-Berndt Scheper
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class DefaultValueComponent2 {
|
||||||
|
|
||||||
|
private String str1 = "defaultValue";
|
||||||
|
|
||||||
|
private String str2;
|
||||||
|
|
||||||
|
public static final DefaultValueComponent2 of(String str1, String str2) {
|
||||||
|
DefaultValueComponent2 instance = new DefaultValueComponent2();
|
||||||
|
instance.setStr1(str1);
|
||||||
|
instance.setStr2(str2);
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStr2() {
|
||||||
|
return str2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStr2(String str2) {
|
||||||
|
this.str2 = str2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStr1() {
|
||||||
|
return str1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStr1(String str1) {
|
||||||
|
this.str1 = str1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o)
|
||||||
|
return true;
|
||||||
|
if (!(o instanceof DefaultValueComponent2))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
DefaultValueComponent2 that = (DefaultValueComponent2) o;
|
||||||
|
|
||||||
|
if (str1 != null ? !str1.equals(that.str1) : that.str1 != null)
|
||||||
|
return false;
|
||||||
|
if (str2 != null ? !str2.equals(that.str2) : that.str2 != null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int hashCode() {
|
||||||
|
int result;
|
||||||
|
result = (str1 != null ? str1.hashCode() : 0);
|
||||||
|
result = 31 * result + (str2 != null ? str2.hashCode() : 0);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return "Comp2(str1 = " + str1 + ", str2 = " + str2 + ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,111 @@
|
||||||
|
/*
|
||||||
|
* 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;
|
||||||
|
|
||||||
|
import javax.persistence.AttributeOverride;
|
||||||
|
import javax.persistence.AttributeOverrides;
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Embedded;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
|
||||||
|
import org.hibernate.envers.Audited;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Erik-Berndt Scheper
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
@Audited
|
||||||
|
public class DefaultValueComponentTestEntity {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
@Embedded
|
||||||
|
@Audited
|
||||||
|
@AttributeOverrides( { @AttributeOverride(name = "comp2.str1", column = @Column(name = "COMP2_STR1")) })
|
||||||
|
private DefaultValueComponent1 comp1 = null;
|
||||||
|
|
||||||
|
public DefaultValueComponentTestEntity() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DefaultValueComponentTestEntity of(
|
||||||
|
DefaultValueComponent1 comp1) {
|
||||||
|
DefaultValueComponentTestEntity instance = new DefaultValueComponentTestEntity();
|
||||||
|
instance.setComp1(comp1);
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DefaultValueComponentTestEntity of(Integer id,
|
||||||
|
DefaultValueComponent1 comp1) {
|
||||||
|
DefaultValueComponentTestEntity instance = new DefaultValueComponentTestEntity();
|
||||||
|
instance.setId(id);
|
||||||
|
instance.setComp1(comp1);
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DefaultValueComponent1 getComp1() {
|
||||||
|
return comp1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setComp1(DefaultValueComponent1 comp1) {
|
||||||
|
this.comp1 = comp1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o)
|
||||||
|
return true;
|
||||||
|
if (!(o instanceof DefaultValueComponentTestEntity))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity that = (DefaultValueComponentTestEntity) 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int hashCode() {
|
||||||
|
int result;
|
||||||
|
result = (id != null ? id.hashCode() : 0);
|
||||||
|
result = 31 * result + (comp1 != null ? comp1.hashCode() : 0);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return "CTE(id = " + id + ", comp1 = " + comp1 + ")";
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,383 @@
|
||||||
|
/*
|
||||||
|
* 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;
|
||||||
|
|
||||||
|
import java.math.BigInteger;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
|
||||||
|
import org.hibernate.ejb.Ejb3Configuration;
|
||||||
|
import org.hibernate.envers.test.AbstractEntityTest;
|
||||||
|
import org.hibernate.envers.test.entities.components.DefaultValueComponent1;
|
||||||
|
import org.hibernate.envers.test.entities.components.DefaultValueComponent2;
|
||||||
|
import org.hibernate.envers.test.entities.components.DefaultValueComponentTestEntity;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.testng.annotations.BeforeClass;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test class for components with default values.
|
||||||
|
*
|
||||||
|
* @see <a
|
||||||
|
* href="http://opensource.atlassian.com/projects/hibernate/browse/HHH-5288">
|
||||||
|
* Hibernate JIRA </a>
|
||||||
|
*
|
||||||
|
* @author Erik-Berndt Scheper
|
||||||
|
*/
|
||||||
|
public class DefaultValueComponents extends AbstractEntityTest {
|
||||||
|
private static final Logger log = LoggerFactory
|
||||||
|
.getLogger(DefaultValueComponents.class);
|
||||||
|
|
||||||
|
private Integer id0;
|
||||||
|
private Integer id1;
|
||||||
|
private Integer id2;
|
||||||
|
private Integer id3;
|
||||||
|
private Integer id4;
|
||||||
|
private Integer id5;
|
||||||
|
private Integer id6;
|
||||||
|
|
||||||
|
public void configure(Ejb3Configuration cfg) {
|
||||||
|
cfg.addAnnotatedClass(DefaultValueComponentTestEntity.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@BeforeClass(dependsOnMethods = "init")
|
||||||
|
public void initData() {
|
||||||
|
// Revision 1
|
||||||
|
EntityManager em = getEntityManager();
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity cte0 = DefaultValueComponentTestEntity
|
||||||
|
.of(null);
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity cte1 = DefaultValueComponentTestEntity
|
||||||
|
.of(DefaultValueComponent1.of("c1-str1", null));
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity cte2 = DefaultValueComponentTestEntity
|
||||||
|
.of(DefaultValueComponent1.of("c1-str1", DefaultValueComponent2
|
||||||
|
.of("c2-str1", "c2-str2")));
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity cte3 = DefaultValueComponentTestEntity
|
||||||
|
.of(DefaultValueComponent1.of(null, DefaultValueComponent2.of(
|
||||||
|
"c2-str1", "c2-str2")));
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity cte4 = DefaultValueComponentTestEntity
|
||||||
|
.of(DefaultValueComponent1.of(null, DefaultValueComponent2.of(
|
||||||
|
null, "c2-str2")));
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity cte5 = DefaultValueComponentTestEntity
|
||||||
|
.of(DefaultValueComponent1.of(null, DefaultValueComponent2.of(
|
||||||
|
"c2-str1", null)));
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity cte6 = DefaultValueComponentTestEntity
|
||||||
|
.of(DefaultValueComponent1.of(null, DefaultValueComponent2.of(
|
||||||
|
null, null)));
|
||||||
|
|
||||||
|
em.persist(cte0);
|
||||||
|
em.persist(cte1);
|
||||||
|
em.persist(cte2);
|
||||||
|
em.persist(cte3);
|
||||||
|
em.persist(cte4);
|
||||||
|
em.persist(cte5);
|
||||||
|
em.persist(cte6);
|
||||||
|
|
||||||
|
em.getTransaction().commit();
|
||||||
|
|
||||||
|
// Revision 2
|
||||||
|
em = getEntityManager();
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
cte0 = em.find(DefaultValueComponentTestEntity.class, cte0.getId());
|
||||||
|
cte1 = em.find(DefaultValueComponentTestEntity.class, cte1.getId());
|
||||||
|
cte2 = em.find(DefaultValueComponentTestEntity.class, cte2.getId());
|
||||||
|
cte3 = em.find(DefaultValueComponentTestEntity.class, cte3.getId());
|
||||||
|
cte4 = em.find(DefaultValueComponentTestEntity.class, cte4.getId());
|
||||||
|
cte5 = em.find(DefaultValueComponentTestEntity.class, cte5.getId());
|
||||||
|
cte6 = em.find(DefaultValueComponentTestEntity.class, cte6.getId());
|
||||||
|
|
||||||
|
cte0.setComp1(DefaultValueComponent1.of("upd-c1-str1", null));
|
||||||
|
cte1.setComp1(DefaultValueComponent1.of(null, DefaultValueComponent2
|
||||||
|
.of("upd-c2-str1", "upd-c2-str2")));
|
||||||
|
cte2.getComp1().getComp2().setStr1("upd-c2-str1");
|
||||||
|
cte3.getComp1().getComp2().setStr1("upd-c2-str1");
|
||||||
|
cte4.getComp1().getComp2().setStr1("upd-c2-str1");
|
||||||
|
cte5.getComp1().getComp2().setStr1("upd-c2-str1");
|
||||||
|
cte6.getComp1().getComp2().setStr1("upd-c2-str1");
|
||||||
|
|
||||||
|
em.getTransaction().commit();
|
||||||
|
|
||||||
|
// afterwards
|
||||||
|
id0 = cte0.getId();
|
||||||
|
id1 = cte1.getId();
|
||||||
|
id2 = cte2.getId();
|
||||||
|
id3 = cte3.getId();
|
||||||
|
id4 = cte4.getId();
|
||||||
|
id5 = cte5.getId();
|
||||||
|
id6 = cte6.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRevisionsCounts() {
|
||||||
|
log.error(getAuditReader().getRevisions(
|
||||||
|
DefaultValueComponentTestEntity.class, id0).toString());
|
||||||
|
log.error(getAuditReader().getRevisions(
|
||||||
|
DefaultValueComponentTestEntity.class, id1).toString());
|
||||||
|
log.error(getAuditReader().getRevisions(
|
||||||
|
DefaultValueComponentTestEntity.class, id2).toString());
|
||||||
|
log.error(getAuditReader().getRevisions(
|
||||||
|
DefaultValueComponentTestEntity.class, id3).toString());
|
||||||
|
log.error(getAuditReader().getRevisions(
|
||||||
|
DefaultValueComponentTestEntity.class, id4).toString());
|
||||||
|
log.error(getAuditReader().getRevisions(
|
||||||
|
DefaultValueComponentTestEntity.class, id5).toString());
|
||||||
|
log.error(getAuditReader().getRevisions(
|
||||||
|
DefaultValueComponentTestEntity.class, id6).toString());
|
||||||
|
|
||||||
|
assert Arrays.asList(1, 2).equals(
|
||||||
|
getAuditReader().getRevisions(
|
||||||
|
DefaultValueComponentTestEntity.class, id0));
|
||||||
|
|
||||||
|
assert Arrays.asList(1, 2).equals(
|
||||||
|
getAuditReader().getRevisions(
|
||||||
|
DefaultValueComponentTestEntity.class, id1));
|
||||||
|
|
||||||
|
assert Arrays.asList(1, 2).equals(
|
||||||
|
getAuditReader().getRevisions(
|
||||||
|
DefaultValueComponentTestEntity.class, id2));
|
||||||
|
|
||||||
|
assert Arrays.asList(1, 2).equals(
|
||||||
|
getAuditReader().getRevisions(
|
||||||
|
DefaultValueComponentTestEntity.class, id3));
|
||||||
|
|
||||||
|
assert Arrays.asList(1, 2).equals(
|
||||||
|
getAuditReader().getRevisions(
|
||||||
|
DefaultValueComponentTestEntity.class, id4));
|
||||||
|
|
||||||
|
assert Arrays.asList(1, 2).equals(
|
||||||
|
getAuditReader().getRevisions(
|
||||||
|
DefaultValueComponentTestEntity.class, id5));
|
||||||
|
|
||||||
|
assert Arrays.asList(1, 2).equals(
|
||||||
|
getAuditReader().getRevisions(
|
||||||
|
DefaultValueComponentTestEntity.class, id6));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testHistoryOfId0() {
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity ent1 = getAuditReader().find(
|
||||||
|
DefaultValueComponentTestEntity.class, id0, 1);
|
||||||
|
DefaultValueComponentTestEntity ent2 = getAuditReader().find(
|
||||||
|
DefaultValueComponentTestEntity.class, id0, 2);
|
||||||
|
|
||||||
|
log.error("------------ id0 -------------");
|
||||||
|
log.error(ent1.toString());
|
||||||
|
log.error(ent2.toString());
|
||||||
|
|
||||||
|
checkCorrectlyPersisted(id0, null, null);
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity
|
||||||
|
.of(id0, DefaultValueComponent1.of(null, null));
|
||||||
|
DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity
|
||||||
|
.of(id0, DefaultValueComponent1.of("upd-c1-str1", null));
|
||||||
|
|
||||||
|
assert ent1.equals(expectedVer1);
|
||||||
|
assert ent2.equals(expectedVer2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testHistoryOfId1() {
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity ent1 = getAuditReader().find(
|
||||||
|
DefaultValueComponentTestEntity.class, id1, 1);
|
||||||
|
DefaultValueComponentTestEntity ent2 = getAuditReader().find(
|
||||||
|
DefaultValueComponentTestEntity.class, id1, 2);
|
||||||
|
|
||||||
|
log.error("------------ id1 -------------");
|
||||||
|
log.error(ent1.toString());
|
||||||
|
log.error(ent2.toString());
|
||||||
|
|
||||||
|
checkCorrectlyPersisted(id1, null, "upd-c2-str1");
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity
|
||||||
|
.of(id1, DefaultValueComponent1.of("c1-str1", null));
|
||||||
|
DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity
|
||||||
|
.of(id1, DefaultValueComponent1.of(null, DefaultValueComponent2
|
||||||
|
.of("upd-c2-str1", "upd-c2-str2")));
|
||||||
|
|
||||||
|
assert ent2.equals(expectedVer2);
|
||||||
|
assert ent1.equals(expectedVer1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testHistoryOfId2() {
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity ent1 = getAuditReader().find(
|
||||||
|
DefaultValueComponentTestEntity.class, id2, 1);
|
||||||
|
DefaultValueComponentTestEntity ent2 = getAuditReader().find(
|
||||||
|
DefaultValueComponentTestEntity.class, id2, 2);
|
||||||
|
|
||||||
|
log.error("------------ id2 -------------");
|
||||||
|
log.error(ent1.toString());
|
||||||
|
log.error(ent2.toString());
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity
|
||||||
|
.of(id2, DefaultValueComponent1.of("c1-str1",
|
||||||
|
DefaultValueComponent2.of("c2-str1", "c2-str2")));
|
||||||
|
DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity
|
||||||
|
.of(id2, DefaultValueComponent1.of("c1-str1",
|
||||||
|
DefaultValueComponent2.of("upd-c2-str1", "c2-str2")));
|
||||||
|
|
||||||
|
assert ent1.equals(expectedVer1);
|
||||||
|
assert ent2.equals(expectedVer2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testHistoryOfId3() {
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity ent1 = getAuditReader().find(
|
||||||
|
DefaultValueComponentTestEntity.class, id3, 1);
|
||||||
|
DefaultValueComponentTestEntity ent2 = getAuditReader().find(
|
||||||
|
DefaultValueComponentTestEntity.class, id3, 2);
|
||||||
|
|
||||||
|
log.error("------------ id3 -------------");
|
||||||
|
log.error(ent1.toString());
|
||||||
|
log.error(ent2.toString());
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity
|
||||||
|
.of(id3, DefaultValueComponent1.of(null, DefaultValueComponent2
|
||||||
|
.of("c2-str1", "c2-str2")));
|
||||||
|
DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity
|
||||||
|
.of(id3, DefaultValueComponent1.of(null, DefaultValueComponent2
|
||||||
|
.of("upd-c2-str1", "c2-str2")));
|
||||||
|
|
||||||
|
assert ent1.equals(expectedVer1);
|
||||||
|
assert ent2.equals(expectedVer2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testHistoryOfId4() {
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity ent1 = getAuditReader().find(
|
||||||
|
DefaultValueComponentTestEntity.class, id4, 1);
|
||||||
|
DefaultValueComponentTestEntity ent2 = getAuditReader().find(
|
||||||
|
DefaultValueComponentTestEntity.class, id4, 2);
|
||||||
|
|
||||||
|
log.error("------------ id4 -------------");
|
||||||
|
log.error(ent1.toString());
|
||||||
|
log.error(ent2.toString());
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity
|
||||||
|
.of(id4, DefaultValueComponent1.of(null, DefaultValueComponent2
|
||||||
|
.of(null, "c2-str2")));
|
||||||
|
DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity
|
||||||
|
.of(id4, DefaultValueComponent1.of(null, DefaultValueComponent2
|
||||||
|
.of("upd-c2-str1", "c2-str2")));
|
||||||
|
|
||||||
|
assert ent1.equals(expectedVer1);
|
||||||
|
assert ent2.equals(expectedVer2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testHistoryOfId5() {
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity ent1 = getAuditReader().find(
|
||||||
|
DefaultValueComponentTestEntity.class, id5, 1);
|
||||||
|
DefaultValueComponentTestEntity ent2 = getAuditReader().find(
|
||||||
|
DefaultValueComponentTestEntity.class, id5, 2);
|
||||||
|
|
||||||
|
log.error("------------ id5 -------------");
|
||||||
|
log.error(ent1.toString());
|
||||||
|
log.error(ent2.toString());
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity
|
||||||
|
.of(id5, DefaultValueComponent1.of(null, DefaultValueComponent2
|
||||||
|
.of("c2-str1", null)));
|
||||||
|
DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity
|
||||||
|
.of(id5, DefaultValueComponent1.of(null, DefaultValueComponent2
|
||||||
|
.of("upd-c2-str1", null)));
|
||||||
|
|
||||||
|
assert ent1.equals(expectedVer1);
|
||||||
|
assert ent2.equals(expectedVer2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testHistoryOfId6() {
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity ent1 = getAuditReader().find(
|
||||||
|
DefaultValueComponentTestEntity.class, id6, 1);
|
||||||
|
DefaultValueComponentTestEntity ent2 = getAuditReader().find(
|
||||||
|
DefaultValueComponentTestEntity.class, id6, 2);
|
||||||
|
|
||||||
|
log.error("------------ id6 -------------");
|
||||||
|
log.error(ent1.toString());
|
||||||
|
log.error(ent2.toString());
|
||||||
|
|
||||||
|
DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity
|
||||||
|
.of(id6, DefaultValueComponent1.of(null, null));
|
||||||
|
DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity
|
||||||
|
.of(id6, DefaultValueComponent1.of(null, DefaultValueComponent2
|
||||||
|
.of("upd-c2-str1", null)));
|
||||||
|
|
||||||
|
assert ent2.equals(expectedVer2);
|
||||||
|
assert ent1.equals(expectedVer1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkCorrectlyPersisted(Integer expectedId,
|
||||||
|
String expectedComp2Str1Rev1, String expectedComp2Str1Rev2) {
|
||||||
|
// Verify that the entity was correctly persisted
|
||||||
|
EntityManager em = getEntityManager();
|
||||||
|
em.getTransaction().begin();
|
||||||
|
Long entCount = (Long) em.createQuery(
|
||||||
|
"select count(s) from DefaultValueComponentTestEntity s where s.id = "
|
||||||
|
+ expectedId.toString()).getSingleResult();
|
||||||
|
BigInteger auditCount = (BigInteger) em.createNativeQuery(
|
||||||
|
"select count(ID) from DefaultValueComponentTestEntity_AUD s where s.id = "
|
||||||
|
+ expectedId.toString()).getSingleResult();
|
||||||
|
String comp2Str1Rev1 = (String) em
|
||||||
|
.createNativeQuery(
|
||||||
|
"select COMP2_STR1 from DefaultValueComponentTestEntity_AUD s where rev=1 and s.id = "
|
||||||
|
+ expectedId.toString()).getSingleResult();
|
||||||
|
String comp2Str1Rev2 = (String) em
|
||||||
|
.createNativeQuery(
|
||||||
|
"select COMP2_STR1 from DefaultValueComponentTestEntity_AUD s where rev=2 and s.id = "
|
||||||
|
+ expectedId.toString()).getSingleResult();
|
||||||
|
assert Long.valueOf(1L).equals(entCount);
|
||||||
|
assert BigInteger.valueOf(2L).equals(auditCount);
|
||||||
|
|
||||||
|
if (expectedComp2Str1Rev1 == null) {
|
||||||
|
assert comp2Str1Rev1 == null;
|
||||||
|
} else {
|
||||||
|
assert expectedComp2Str1Rev1.equals(comp2Str1Rev1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (expectedComp2Str1Rev2 == null) {
|
||||||
|
assert comp2Str1Rev2 == null;
|
||||||
|
} else {
|
||||||
|
assert expectedComp2Str1Rev2.equals(comp2Str1Rev2);
|
||||||
|
}
|
||||||
|
em.getTransaction().commit();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue