HHH-16379 Add test for issue
This commit is contained in:
parent
941b336143
commit
198ede22e4
|
@ -0,0 +1,246 @@
|
||||||
|
package org.hibernate.orm.test.bytecode.enhancement.dirty;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.hibernate.annotations.DynamicUpdate;
|
||||||
|
|
||||||
|
import org.hibernate.testing.bytecode.enhancement.BytecodeEnhancerRunner;
|
||||||
|
import org.hibernate.testing.bytecode.enhancement.EnhancementOptions;
|
||||||
|
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||||
|
import org.hibernate.testing.orm.junit.JiraKey;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
import jakarta.persistence.Column;
|
||||||
|
import jakarta.persistence.DiscriminatorColumn;
|
||||||
|
import jakarta.persistence.DiscriminatorType;
|
||||||
|
import jakarta.persistence.DiscriminatorValue;
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.Id;
|
||||||
|
import jakarta.persistence.Inheritance;
|
||||||
|
import jakarta.persistence.InheritanceType;
|
||||||
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
|
||||||
|
|
||||||
|
@RunWith(BytecodeEnhancerRunner.class)
|
||||||
|
@EnhancementOptions(inlineDirtyChecking = true)
|
||||||
|
public class DirtyTrackingDynamicUpdateAndInheritanceTest extends BaseCoreFunctionalTestCase {
|
||||||
|
|
||||||
|
public static final int ID = 1;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Class<?>[] getAnnotatedClasses() {
|
||||||
|
return new Class<?>[] {
|
||||||
|
SuperEntity.class,
|
||||||
|
ChildEntity.class,
|
||||||
|
AbstractVersion.class,
|
||||||
|
FileVersion.class
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@JiraKey("HHH-16688")
|
||||||
|
public void testDynamicUpdateWithInheritance() {
|
||||||
|
inTransaction(
|
||||||
|
session -> {
|
||||||
|
ChildEntity entity = new ChildEntity( ID );
|
||||||
|
entity.setaSuper( "aSuper before" );
|
||||||
|
entity.setbSuper( "bSuper before" );
|
||||||
|
entity.setaChild( "aChild before" );
|
||||||
|
entity.setbChild( "bChild before" );
|
||||||
|
session.persist( entity );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
String aSuperNewValue = "aSuper after";
|
||||||
|
String bSuperNewValue = "bSuper after";
|
||||||
|
String aChildNewValue = "aChild after";
|
||||||
|
String bChildNewValue = "bChild after";
|
||||||
|
|
||||||
|
inTransaction(
|
||||||
|
session -> {
|
||||||
|
ChildEntity entity = session.find( ChildEntity.class, ID );
|
||||||
|
entity.setaSuper( aSuperNewValue );
|
||||||
|
entity.setbSuper( bSuperNewValue );
|
||||||
|
entity.setaChild( aChildNewValue );
|
||||||
|
entity.setbChild( bChildNewValue );
|
||||||
|
session.merge( entity );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
inTransaction(
|
||||||
|
session -> {
|
||||||
|
ChildEntity entity = session.find( ChildEntity.class, ID );
|
||||||
|
assertThat( entity.getaSuper() ).isEqualTo( aSuperNewValue );
|
||||||
|
assertThat( entity.getbSuper() ).isEqualTo( bSuperNewValue );
|
||||||
|
assertThat( entity.getaChild() ).isEqualTo( aChildNewValue );
|
||||||
|
assertThat( entity.getbChild() ).isEqualTo( bChildNewValue );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@JiraKey("HHH-16379")
|
||||||
|
public void testWithDynamicUpdate() {
|
||||||
|
|
||||||
|
inTransaction(
|
||||||
|
session -> {
|
||||||
|
FileVersion version = new FileVersion();
|
||||||
|
version.setId( "1" );
|
||||||
|
version.setFileSize( 100L );
|
||||||
|
version.setCheckSumMD5( "ABCDEF" );
|
||||||
|
version.setVariantName( "A" );
|
||||||
|
session.persist( version );
|
||||||
|
|
||||||
|
session.flush();
|
||||||
|
|
||||||
|
// update version
|
||||||
|
session.evict( version );
|
||||||
|
List<FileVersion> result = session.createQuery( "from FileVersion", FileVersion.class )
|
||||||
|
.getResultList();
|
||||||
|
assertThat( result.size() ).isEqualTo( 1 );
|
||||||
|
|
||||||
|
version = result.get( 0 );
|
||||||
|
version.setCheckSumMD5( "XXXXXXXX" );
|
||||||
|
version.setVariantName( "B" );
|
||||||
|
version.setFileSize( 200L );
|
||||||
|
session.persist( version );
|
||||||
|
session.flush();
|
||||||
|
|
||||||
|
session.evict( version );
|
||||||
|
result = session.createQuery( "from FileVersion", FileVersion.class )
|
||||||
|
.getResultList();
|
||||||
|
assertThat( result.size() ).isEqualTo( 1 );
|
||||||
|
|
||||||
|
version = result.get( 0 );
|
||||||
|
assertThat( version.getCheckSumMD5() ).isEqualTo( "XXXXXXXX" );
|
||||||
|
assertThat( version.getVariantName() ).isEqualTo( "B" );
|
||||||
|
assertThat( version.getFileSize() ).isEqualTo( 200L );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Entity(name = "SuperEntity")
|
||||||
|
public abstract static class SuperEntity {
|
||||||
|
@Id
|
||||||
|
private Integer id;
|
||||||
|
private String bSuper;
|
||||||
|
private String aSuper;
|
||||||
|
|
||||||
|
public SuperEntity() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public SuperEntity(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getaSuper() {
|
||||||
|
return aSuper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setaSuper(String aSuper) {
|
||||||
|
this.aSuper = aSuper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getbSuper() {
|
||||||
|
return bSuper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setbSuper(String bSuper) {
|
||||||
|
this.bSuper = bSuper;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "ChildEntity")
|
||||||
|
@DynamicUpdate
|
||||||
|
public static class ChildEntity extends SuperEntity {
|
||||||
|
private String aChild;
|
||||||
|
private String bChild;
|
||||||
|
|
||||||
|
public ChildEntity() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChildEntity(Integer id) {
|
||||||
|
super( id );
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getaChild() {
|
||||||
|
return aChild;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setaChild(String aChild) {
|
||||||
|
this.aChild = aChild;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getbChild() {
|
||||||
|
return bChild;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setbChild(String bChild) {
|
||||||
|
this.bChild = bChild;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "AbstractVersion")
|
||||||
|
@Table(name = "Versionen")
|
||||||
|
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
|
||||||
|
@DiscriminatorColumn(name = "REPRAESENTATION", discriminatorType = DiscriminatorType.STRING)
|
||||||
|
@DynamicUpdate()
|
||||||
|
public static abstract class AbstractVersion {
|
||||||
|
@Id
|
||||||
|
@Column(name = "VERS_NUMMER")
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
@Column(name = "CHECKSUM")
|
||||||
|
protected String checkSumMD5;
|
||||||
|
|
||||||
|
@Column(name = "VARIANTE", nullable = false)
|
||||||
|
private String variantName;
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCheckSumMD5() {
|
||||||
|
return checkSumMD5;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCheckSumMD5(String checkSumMD5) {
|
||||||
|
this.checkSumMD5 = checkSumMD5;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getVariantName() {
|
||||||
|
return variantName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVariantName(String variantName) {
|
||||||
|
this.variantName = variantName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "FileVersion")
|
||||||
|
@DiscriminatorValue("F")
|
||||||
|
@DynamicUpdate()
|
||||||
|
public static class FileVersion extends AbstractVersion {
|
||||||
|
@Column(name = "FILESIZE")
|
||||||
|
private Long fileSize;
|
||||||
|
|
||||||
|
public Long getFileSize() {
|
||||||
|
return fileSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFileSize(Long fileSize) {
|
||||||
|
this.fileSize = fileSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,122 @@
|
||||||
|
package org.hibernate.orm.test.bytecode.enhancement.dirty;
|
||||||
|
|
||||||
|
import org.hibernate.testing.bytecode.enhancement.BytecodeEnhancerRunner;
|
||||||
|
import org.hibernate.testing.bytecode.enhancement.EnhancementOptions;
|
||||||
|
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||||
|
import org.hibernate.testing.orm.junit.JiraKey;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.Id;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
|
||||||
|
|
||||||
|
@RunWith(BytecodeEnhancerRunner.class)
|
||||||
|
@EnhancementOptions(inlineDirtyChecking = true)
|
||||||
|
@JiraKey("HHH-16688")
|
||||||
|
public class DirtyTrackingDynamicUpdateTest extends BaseCoreFunctionalTestCase {
|
||||||
|
|
||||||
|
public static final int ID = 1;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Class<?>[] getAnnotatedClasses() {
|
||||||
|
return new Class<?>[] { TestEntity.class };
|
||||||
|
}
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() {
|
||||||
|
inTransaction(
|
||||||
|
session -> {
|
||||||
|
|
||||||
|
TestEntity testEntity = new TestEntity( ID );
|
||||||
|
testEntity.setaSuper( "aSuper before" );
|
||||||
|
testEntity.setbSuper( "bSuper before" );
|
||||||
|
testEntity.setaChild( "aChild before" );
|
||||||
|
testEntity.setbChild( "bChild before" );
|
||||||
|
session.persist( testEntity );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDynamicUpdate() {
|
||||||
|
|
||||||
|
String aSuperNewValue = "aSuper after";
|
||||||
|
String bSuperNewValue = "bSuper after";
|
||||||
|
String aChildNewValue = "aChild after";
|
||||||
|
String bChildNewValue = "bChild after";
|
||||||
|
|
||||||
|
inTransaction(
|
||||||
|
session -> {
|
||||||
|
TestEntity entity = session.find( TestEntity.class, ID );
|
||||||
|
entity.setaSuper( aSuperNewValue );
|
||||||
|
entity.setbSuper( bSuperNewValue );
|
||||||
|
entity.setaChild( aChildNewValue );
|
||||||
|
entity.setbChild( bChildNewValue );
|
||||||
|
session.merge( entity );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
inTransaction(
|
||||||
|
session -> {
|
||||||
|
TestEntity entity = session.find( TestEntity.class, ID );
|
||||||
|
assertThat( entity.getaSuper() ).isEqualTo( aSuperNewValue );
|
||||||
|
assertThat( entity.getbSuper() ).isEqualTo( bSuperNewValue );
|
||||||
|
assertThat( entity.getaChild() ).isEqualTo( aChildNewValue );
|
||||||
|
assertThat( entity.getbChild() ).isEqualTo( bChildNewValue );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "TestEntity")
|
||||||
|
public static class TestEntity {
|
||||||
|
@Id
|
||||||
|
private Integer id;
|
||||||
|
private String aSuper;
|
||||||
|
private String bSuper;
|
||||||
|
private String aChild;
|
||||||
|
private String bChild;
|
||||||
|
|
||||||
|
public TestEntity() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public TestEntity(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getaSuper() {
|
||||||
|
return aSuper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setaSuper(String aSuper) {
|
||||||
|
this.aSuper = aSuper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getbSuper() {
|
||||||
|
return bSuper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setbSuper(String bSuper) {
|
||||||
|
this.bSuper = bSuper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getaChild() {
|
||||||
|
return aChild;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setaChild(String aChild) {
|
||||||
|
this.aChild = aChild;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getbChild() {
|
||||||
|
return bChild;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setbChild(String bChild) {
|
||||||
|
this.bChild = bChild;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue