HHH-8505: Advanced test - OneToOne & ManyToOne
This commit is contained in:
parent
0aefe3a55b
commit
7c492ddbc3
|
@ -443,7 +443,7 @@ public class AuditedPropertiesReader {
|
||||||
final boolean isAudited = fillPropertyData(property, componentData, accessType, allClassAudited);
|
final boolean isAudited = fillPropertyData(property, componentData, accessType, allClassAudited);
|
||||||
|
|
||||||
final PersistentPropertiesSource componentPropertiesSource;
|
final PersistentPropertiesSource componentPropertiesSource;
|
||||||
if (propertyValue.isDynamic() && isAudited) {
|
if (propertyValue.isDynamic()) {
|
||||||
componentPropertiesSource = new DynamicComponentSource(reflectionManager, propertyValue, property);
|
componentPropertiesSource = new DynamicComponentSource(reflectionManager, propertyValue, property);
|
||||||
} else {
|
} else {
|
||||||
componentPropertiesSource = new ComponentPropertiesSource(reflectionManager, propertyValue);
|
componentPropertiesSource = new ComponentPropertiesSource(reflectionManager, propertyValue);
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
package org.hibernate.envers.test.integration.components.dynamic;
|
||||||
|
|
||||||
|
import org.hibernate.envers.Audited;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Audited
|
||||||
|
public class AdvancedEntity {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private String note;
|
||||||
|
|
||||||
|
private Map<String,Object> dynamicConfiguration = new HashMap<String, Object>();
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNote() {
|
||||||
|
return note;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNote(String note) {
|
||||||
|
this.note = note;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Object> getDynamicConfiguration() {
|
||||||
|
return dynamicConfiguration;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDynamicConfiguration(Map<String, Object> dynamicConfiguration) {
|
||||||
|
this.dynamicConfiguration = dynamicConfiguration;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (!(o instanceof AdvancedEntity)) return false;
|
||||||
|
|
||||||
|
AdvancedEntity that = (AdvancedEntity) o;
|
||||||
|
|
||||||
|
if (dynamicConfiguration != null ? !dynamicConfiguration.equals(that.dynamicConfiguration) : that.dynamicConfiguration != null)
|
||||||
|
return false;
|
||||||
|
if (id != null ? !id.equals(that.id) : that.id != null) return false;
|
||||||
|
if (note != null ? !note.equals(that.note) : that.note != null) return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = id != null ? id.hashCode() : 0;
|
||||||
|
result = 31 * result + (note != null ? note.hashCode() : 0);
|
||||||
|
result = 31 * result + (dynamicConfiguration != null ? dynamicConfiguration.hashCode() : 0);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "AdvancedEntity{" +
|
||||||
|
"id=" + id +
|
||||||
|
", note='" + note + '\'' +
|
||||||
|
", dynamicConfiguration=" + dynamicConfiguration +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,83 @@
|
||||||
|
package org.hibernate.envers.test.integration.components.dynamic;
|
||||||
|
|
||||||
|
import junit.framework.Assert;
|
||||||
|
import org.hibernate.Session;
|
||||||
|
import org.hibernate.envers.test.BaseEnversFunctionalTestCase;
|
||||||
|
import org.hibernate.envers.test.Priority;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class AuditedDynamicComponentsAdvancedCasesTest extends BaseEnversFunctionalTestCase {
|
||||||
|
|
||||||
|
public static final String PROP_BOOLEAN = "propBoolean";
|
||||||
|
public static final String PROP_INT = "propInt";
|
||||||
|
public static final String PROP_FLOAT = "propFloat";
|
||||||
|
public static final String PROP_MANY_TO_ONE = "propManyToOne";
|
||||||
|
public static final String PROP_ONE_TO_ONE = "propOneToOne";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String[] getMappings() {
|
||||||
|
return new String[]{"mappings/dynamicComponents/mapAdvanced.hbm.xml"};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Priority(10)
|
||||||
|
//smoke test to make sure that hibernate & envers are working with the entity&mappings
|
||||||
|
public void shouldSaveEntity() {
|
||||||
|
//given
|
||||||
|
ManyToOneEntity manyToOne = getManyToOneEntity();
|
||||||
|
OneToOneEntity oneToOne = getOneToOneEntity();
|
||||||
|
AdvancedEntity advancedEntity = getAdvancedEntity(manyToOne, oneToOne);
|
||||||
|
|
||||||
|
|
||||||
|
Session session = openSession();
|
||||||
|
session.getTransaction().begin();
|
||||||
|
session.save(manyToOne);
|
||||||
|
session.save(oneToOne);
|
||||||
|
session.save(advancedEntity);
|
||||||
|
session.getTransaction().commit();
|
||||||
|
|
||||||
|
AdvancedEntity advancedEntityActual = (AdvancedEntity) session.load(AdvancedEntity.class, 1L);
|
||||||
|
|
||||||
|
Assert.assertEquals(advancedEntity, advancedEntityActual);
|
||||||
|
}
|
||||||
|
|
||||||
|
private AdvancedEntity getAdvancedEntity(ManyToOneEntity manyToOne, OneToOneEntity oneToOne) {
|
||||||
|
AdvancedEntity advancedEntity = new AdvancedEntity();
|
||||||
|
advancedEntity.setId(1L);
|
||||||
|
advancedEntity.setNote("Test note");
|
||||||
|
advancedEntity.getDynamicConfiguration().put(PROP_BOOLEAN, true);
|
||||||
|
advancedEntity.getDynamicConfiguration().put(PROP_INT, 19);
|
||||||
|
advancedEntity.getDynamicConfiguration().put(PROP_FLOAT, 15.9f);
|
||||||
|
advancedEntity.getDynamicConfiguration().put(PROP_MANY_TO_ONE, manyToOne);
|
||||||
|
advancedEntity.getDynamicConfiguration().put(PROP_ONE_TO_ONE, oneToOne);
|
||||||
|
return advancedEntity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldMakeFirstRevision() {
|
||||||
|
Session session = openSession();
|
||||||
|
//given & when shouldSaveEntity
|
||||||
|
ManyToOneEntity manyToOne = getManyToOneEntity();
|
||||||
|
OneToOneEntity oneToOne = getOneToOneEntity();
|
||||||
|
AdvancedEntity advancedEntity = getAdvancedEntity(manyToOne, oneToOne);
|
||||||
|
|
||||||
|
//then
|
||||||
|
session.getTransaction().begin();
|
||||||
|
AdvancedEntity ver1 = getAuditReader().find(
|
||||||
|
AdvancedEntity.class,
|
||||||
|
advancedEntity.getId(),
|
||||||
|
1
|
||||||
|
);
|
||||||
|
Assert.assertEquals(advancedEntity, ver1);
|
||||||
|
session.getTransaction().commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
private OneToOneEntity getOneToOneEntity() {
|
||||||
|
return new OneToOneEntity(1L, "OneToOne");
|
||||||
|
}
|
||||||
|
|
||||||
|
private ManyToOneEntity getManyToOneEntity() {
|
||||||
|
return new ManyToOneEntity(1L, "ManyToOne");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
package org.hibernate.envers.test.integration.components.dynamic;
|
||||||
|
|
||||||
|
import org.hibernate.envers.Audited;
|
||||||
|
|
||||||
|
@Audited
|
||||||
|
public class ManyToOneEntity {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
private String note;
|
||||||
|
|
||||||
|
public ManyToOneEntity() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public ManyToOneEntity(Long id, String note) {
|
||||||
|
this.id = id;
|
||||||
|
this.note = note;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNote() {
|
||||||
|
return note;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNote(String note) {
|
||||||
|
this.note = note;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (!(o instanceof ManyToOneEntity)) return false;
|
||||||
|
|
||||||
|
ManyToOneEntity that = (ManyToOneEntity) o;
|
||||||
|
|
||||||
|
if (id != null ? !id.equals(that.id) : that.id != null) return false;
|
||||||
|
if (note != null ? !note.equals(that.note) : that.note != null) return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = id != null ? id.hashCode() : 0;
|
||||||
|
result = 31 * result + (note != null ? note.hashCode() : 0);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "ManyToOneEntity{" +
|
||||||
|
"id=" + id +
|
||||||
|
", note='" + note + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
package org.hibernate.envers.test.integration.components.dynamic;
|
||||||
|
|
||||||
|
import org.hibernate.envers.Audited;
|
||||||
|
|
||||||
|
@Audited
|
||||||
|
public class OneToOneEntity {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
private String note;
|
||||||
|
|
||||||
|
public OneToOneEntity() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public OneToOneEntity(Long id, String note) {
|
||||||
|
this.id = id;
|
||||||
|
this.note = note;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNote() {
|
||||||
|
return note;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNote(String note) {
|
||||||
|
this.note = note;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (!(o instanceof OneToOneEntity)) return false;
|
||||||
|
|
||||||
|
OneToOneEntity that = (OneToOneEntity) o;
|
||||||
|
|
||||||
|
if (id != null ? !id.equals(that.id) : that.id != null) return false;
|
||||||
|
if (note != null ? !note.equals(that.note) : that.note != null) return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = id != null ? id.hashCode() : 0;
|
||||||
|
result = 31 * result + (note != null ? note.hashCode() : 0);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "OneToOneEntity{" +
|
||||||
|
"id=" + id +
|
||||||
|
", note='" + note + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,6 +8,8 @@ public class SimpleEntity {
|
||||||
private Long id;
|
private Long id;
|
||||||
private String simpleProperty;
|
private String simpleProperty;
|
||||||
|
|
||||||
|
private AdvancedEntity parent;
|
||||||
|
|
||||||
public SimpleEntity() {
|
public SimpleEntity() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,4 +62,12 @@ public class SimpleEntity {
|
||||||
", simpleProperty='" + simpleProperty + '\'' +
|
", simpleProperty='" + simpleProperty + '\'' +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public AdvancedEntity getParent() {
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setParent(AdvancedEntity parent) {
|
||||||
|
this.parent = parent;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE hibernate-mapping PUBLIC
|
||||||
|
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
|
||||||
|
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
|
||||||
|
<hibernate-mapping default-lazy="false">
|
||||||
|
<class name="org.hibernate.envers.test.integration.components.dynamic.AdvancedEntity" table="advanced_entity">
|
||||||
|
<id name="id" type="long" column="id"/>
|
||||||
|
<property name="note" type="string"/>
|
||||||
|
<dynamic-component name="dynamicConfiguration">
|
||||||
|
<property name="propInt" type="integer"/>
|
||||||
|
<property name="propFloat" type="float"/>
|
||||||
|
<property name="propBoolean" type="boolean"/>
|
||||||
|
<many-to-one name="propManyToOne" class="org.hibernate.envers.test.integration.components.dynamic.ManyToOneEntity" column="MANY_TO_ONE_ID"/>
|
||||||
|
<one-to-one name="propOneToOne" class="org.hibernate.envers.test.integration.components.dynamic.OneToOneEntity"/>
|
||||||
|
</dynamic-component>
|
||||||
|
<!--<one-to-one name="oneToOneEntity" class="org.hibernate.envers.test.integration.components.dynamic.OneToOneEntity"/>-->
|
||||||
|
</class>
|
||||||
|
<class name="org.hibernate.envers.test.integration.components.dynamic.OneToOneEntity" table="one_to_one_entity">
|
||||||
|
<id name="id" type="long" column="id"/>
|
||||||
|
<property name="note" type="string"/>
|
||||||
|
</class>
|
||||||
|
<class name="org.hibernate.envers.test.integration.components.dynamic.ManyToOneEntity" table="many_to_one_entity">
|
||||||
|
<id name="id" type="long" column="id"/>
|
||||||
|
<property name="note" type="string"/>
|
||||||
|
</class>
|
||||||
|
|
||||||
|
</hibernate-mapping>
|
||||||
|
|
Loading…
Reference in New Issue