Skip to content

Commit e84b79e

Browse files
committed
HHH-19535 add test for Interceptor.postMerge()
1 parent b372429 commit e84b79e

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.interceptor.merge;
6+
7+
import org.hibernate.Interceptor;
8+
import org.hibernate.type.Type;
9+
10+
import java.util.ArrayList;
11+
import java.util.List;
12+
13+
public class MergeAuditingInterceptor implements Interceptor {
14+
15+
static final List<String> auditTrail = new ArrayList<>();
16+
17+
@Override
18+
public void postMerge(Object source, Object target, Object id, Object[] targetState, Object[] originalState, String[] propertyNames, Type[] propertyTypes) {
19+
for ( int i = 0; i < propertyNames.length; i++ ) {
20+
if ( !propertyTypes[i].isEqual( originalState[i], targetState[i] ) ) {
21+
auditTrail.add( propertyNames[i] + " changed from " + originalState[i] + " to " + targetState[i] + " for " + id );
22+
}
23+
}
24+
}
25+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.interceptor.merge;
6+
7+
import jakarta.persistence.Entity;
8+
import jakarta.persistence.GeneratedValue;
9+
import jakarta.persistence.Id;
10+
import org.hibernate.cfg.SessionEventSettings;
11+
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
12+
import org.hibernate.testing.orm.junit.Jpa;
13+
import org.hibernate.testing.orm.junit.Setting;
14+
import org.junit.jupiter.api.Test;
15+
16+
import static org.junit.jupiter.api.Assertions.assertEquals;
17+
18+
@Jpa(annotatedClasses = MergeAuditingInterceptorTest.Thing.class,
19+
integrationSettings = @Setting(name = SessionEventSettings.INTERCEPTOR,
20+
value = "org.hibernate.orm.test.interceptor.merge.MergeAuditingInterceptor"))
21+
class MergeAuditingInterceptorTest {
22+
@Test
23+
void test(EntityManagerFactoryScope scope) {
24+
Thing t = scope.fromTransaction( em -> {
25+
Thing thing = new Thing();
26+
thing.name = "Hibernate";
27+
em.persist( thing );
28+
return thing;
29+
} );
30+
scope.inTransaction( em -> {
31+
t.name = "Hibernate ORM";
32+
Thing thing = em.merge( t );
33+
assertEquals( 1, MergeAuditingInterceptor.auditTrail.size() );
34+
assertEquals( "name changed from Hibernate to Hibernate ORM for " + t.id,
35+
MergeAuditingInterceptor.auditTrail.get( 0 ) );
36+
} );
37+
}
38+
39+
@Entity
40+
static class Thing {
41+
@Id
42+
@GeneratedValue
43+
private Long id;
44+
private String name;
45+
}
46+
}

0 commit comments

Comments
 (0)