Skip to content

Commit fe9aec8

Browse files
VladoKurucdreab8
authored andcommitted
HHH-14061 Add test showing the issue has been resolved
1 parent 81d973c commit fe9aec8

File tree

3 files changed

+134
-2
lines changed

3 files changed

+134
-2
lines changed

hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/SetRefEdEntity.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,16 @@
55
package org.hibernate.orm.test.envers.entities.onetomany;
66

77
import java.util.Set;
8+
9+
import jakarta.persistence.CascadeType;
810
import jakarta.persistence.Entity;
11+
import jakarta.persistence.FetchType;
912
import jakarta.persistence.Id;
13+
import jakarta.persistence.ManyToOne;
1014
import jakarta.persistence.OneToMany;
1115

1216
import org.hibernate.envers.Audited;
17+
import org.hibernate.envers.RelationTargetAuditMode;
1318

1419
/**
1520
* ReferencEd entity
@@ -25,9 +30,13 @@ public class SetRefEdEntity {
2530
private String data;
2631

2732
@Audited
28-
@OneToMany(mappedBy = "reference")
33+
@OneToMany(fetch = FetchType.LAZY, mappedBy = "reference", cascade = CascadeType.ALL)
2934
private Set<SetRefIngEntity> reffering;
3035

36+
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
37+
@ManyToOne(fetch = FetchType.LAZY)
38+
private SetRefIngEntity ref;
39+
3140
public SetRefEdEntity() {
3241
}
3342

@@ -64,6 +73,14 @@ public void setReffering(Set<SetRefIngEntity> reffering) {
6473
this.reffering = reffering;
6574
}
6675

76+
public SetRefIngEntity getRef() {
77+
return ref;
78+
}
79+
80+
public void setRef(SetRefIngEntity ref) {
81+
this.ref = ref;
82+
}
83+
6784
public boolean equals(Object o) {
6885
if ( this == o ) {
6986
return true;

hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/SetRefIngEntity.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package org.hibernate.orm.test.envers.entities.onetomany;
66

77
import jakarta.persistence.Entity;
8+
import jakarta.persistence.FetchType;
89
import jakarta.persistence.Id;
910
import jakarta.persistence.ManyToOne;
1011

@@ -24,7 +25,7 @@ public class SetRefIngEntity {
2425
private String data;
2526

2627
@Audited
27-
@ManyToOne
28+
@ManyToOne(fetch = FetchType.LAZY)
2829
private SetRefEdEntity reference;
2930

3031
public SetRefIngEntity() {
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.envers.integration.jta;
6+
7+
import java.util.Arrays;
8+
import java.util.HashSet;
9+
import java.util.Map;
10+
import java.util.Set;
11+
12+
import jakarta.persistence.EntityManager;
13+
import org.hibernate.FlushMode;
14+
import org.hibernate.Session;
15+
import org.hibernate.cfg.AvailableSettings;
16+
import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase;
17+
import org.hibernate.orm.test.envers.Priority;
18+
import org.hibernate.orm.test.envers.entities.onetomany.SetRefEdEntity;
19+
import org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity;
20+
import org.hibernate.testing.jta.TestingJtaBootstrap;
21+
import org.hibernate.testing.jta.TestingJtaPlatformImpl;
22+
import org.hibernate.testing.orm.junit.JiraKey;
23+
import org.junit.Test;
24+
25+
import static org.junit.Assert.assertEquals;
26+
27+
/**
28+
* @author VladoKuruc
29+
*/
30+
@JiraKey( value = "HHH-14061")
31+
public class OneToManyLazyJtaSessionClosedBeforeCommitTest extends BaseEnversJPAFunctionalTestCase {
32+
private Integer parentId;
33+
private Integer entityId;
34+
35+
@Override
36+
protected Class<?>[] getAnnotatedClasses() {
37+
return new Class<?>[] {SetRefIngEntity.class, SetRefEdEntity.class};
38+
}
39+
40+
@Override
41+
protected void addConfigOptions(Map options) {
42+
TestingJtaBootstrap.prepare( options );
43+
options.put( AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, "true" );
44+
}
45+
46+
@Test
47+
@Priority(10)
48+
public void initData() throws Exception {
49+
TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin();
50+
EntityManager entityManager = getEntityManager();
51+
try {
52+
SetRefIngEntity refIngEntity = new SetRefIngEntity( 3, "ingEntityRef" );
53+
entityManager.persist( refIngEntity );
54+
55+
SetRefEdEntity edEntity = new SetRefEdEntity( 2, "edEntity" );
56+
edEntity.setRef(refIngEntity);
57+
entityManager.persist( edEntity );
58+
parentId = edEntity.getId();
59+
60+
SetRefIngEntity ingEntity = new SetRefIngEntity( 1, "ingEntity" );
61+
62+
Set<SetRefIngEntity> sries = new HashSet<>();
63+
sries.add( ingEntity );
64+
ingEntity.setReference( edEntity );
65+
edEntity.setReffering( sries );
66+
67+
entityManager.persist( ingEntity );
68+
69+
entityId = ingEntity.getId();
70+
}
71+
finally {
72+
entityManager.close();
73+
TestingJtaPlatformImpl.tryCommit();
74+
}
75+
TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin();
76+
entityManager = getEntityManager();
77+
try {
78+
entityManager.unwrap(Session.class).setHibernateFlushMode(FlushMode.MANUAL);
79+
SetRefEdEntity edEntity = entityManager.find(SetRefEdEntity.class, parentId);
80+
Set<SetRefIngEntity> reffering = edEntity.getReffering();
81+
SetRefIngEntity ingEntity = reffering.iterator().next();
82+
ingEntity.setReference(null);
83+
reffering.remove(ingEntity);
84+
entityManager.merge(ingEntity);
85+
entityManager.flush();
86+
//clear context in transaction
87+
entityManager.clear();
88+
entityManager.merge(edEntity);
89+
entityManager.flush();
90+
}
91+
finally {
92+
entityManager.close();
93+
TestingJtaPlatformImpl.tryCommit();
94+
}
95+
}
96+
97+
@Test
98+
public void testRevisionCounts() {
99+
assertEquals(
100+
Arrays.asList(1, 2),
101+
getAuditReader().getRevisions( SetRefIngEntity.class, entityId )
102+
);
103+
assertEquals(
104+
Arrays.asList(1, 2),
105+
getAuditReader().getRevisions( SetRefEdEntity.class, parentId )
106+
);
107+
}
108+
109+
@Test
110+
public void testRevisionHistory() {
111+
assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( SetRefIngEntity.class, entityId ) );
112+
assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( SetRefEdEntity.class, parentId ) );
113+
}
114+
}

0 commit comments

Comments
 (0)