Skip to content

Commit 1fdaacb

Browse files
HHH-11866 fix CustomEntityDirtinessStrategy#resetDirty is not called after entity initialization
1 parent 4612094 commit 1fdaacb

File tree

2 files changed

+30
-32
lines changed

2 files changed

+30
-32
lines changed

hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,7 @@
44
*/
55
package org.hibernate.persister.entity;
66

7-
import java.io.Serializable;
8-
import java.sql.PreparedStatement;
9-
import java.sql.ResultSet;
10-
import java.sql.SQLException;
11-
import java.util.ArrayList;
12-
import java.util.Arrays;
13-
import java.util.BitSet;
14-
import java.util.Collection;
15-
import java.util.HashMap;
16-
import java.util.HashSet;
17-
import java.util.LinkedHashMap;
18-
import java.util.List;
19-
import java.util.Locale;
20-
import java.util.Map;
21-
import java.util.Objects;
22-
import java.util.Set;
23-
import java.util.SortedMap;
24-
import java.util.TreeMap;
25-
import java.util.concurrent.ConcurrentHashMap;
26-
import java.util.function.BiConsumer;
27-
import java.util.function.Consumer;
28-
import java.util.function.Supplier;
29-
7+
import org.checkerframework.checker.nullness.qual.Nullable;
308
import org.hibernate.AssertionFailure;
319
import org.hibernate.FetchMode;
3210
import org.hibernate.Filter;
@@ -39,6 +17,7 @@
3917
import org.hibernate.MappingException;
4018
import org.hibernate.PropertyValueException;
4119
import org.hibernate.QueryException;
20+
import org.hibernate.Session;
4221
import org.hibernate.annotations.CacheLayout;
4322
import org.hibernate.boot.Metadata;
4423
import org.hibernate.boot.model.relational.SqlStringGenerationContext;
@@ -157,6 +136,7 @@
157136
import org.hibernate.metamodel.mapping.ForeignKeyDescriptor;
158137
import org.hibernate.metamodel.mapping.JdbcMapping;
159138
import org.hibernate.metamodel.mapping.ManagedMappingType;
139+
import org.hibernate.metamodel.mapping.internal.MappingModelHelper;
160140
import org.hibernate.metamodel.mapping.ModelPart;
161141
import org.hibernate.metamodel.mapping.NaturalIdMapping;
162142
import org.hibernate.metamodel.mapping.NonAggregatedIdentifierMapping;
@@ -179,7 +159,6 @@
179159
import org.hibernate.metamodel.mapping.internal.InFlightEntityMappingType;
180160
import org.hibernate.metamodel.mapping.internal.MappingModelCreationHelper;
181161
import org.hibernate.metamodel.mapping.internal.MappingModelCreationProcess;
182-
import org.hibernate.metamodel.mapping.internal.MappingModelHelper;
183162
import org.hibernate.metamodel.mapping.internal.SimpleAttributeMetadata;
184163
import org.hibernate.metamodel.mapping.internal.SimpleNaturalIdMapping;
185164
import org.hibernate.metamodel.mapping.internal.UnifiedAnyDiscriminatorConverter;
@@ -275,7 +254,28 @@
275254
import org.hibernate.type.descriptor.java.MutabilityPlan;
276255
import org.hibernate.type.spi.TypeConfiguration;
277256

278-
import org.checkerframework.checker.nullness.qual.Nullable;
257+
import java.io.Serializable;
258+
import java.sql.PreparedStatement;
259+
import java.sql.ResultSet;
260+
import java.sql.SQLException;
261+
import java.util.ArrayList;
262+
import java.util.Arrays;
263+
import java.util.BitSet;
264+
import java.util.Collection;
265+
import java.util.HashMap;
266+
import java.util.HashSet;
267+
import java.util.LinkedHashMap;
268+
import java.util.List;
269+
import java.util.Locale;
270+
import java.util.Map;
271+
import java.util.Objects;
272+
import java.util.Set;
273+
import java.util.SortedMap;
274+
import java.util.TreeMap;
275+
import java.util.concurrent.ConcurrentHashMap;
276+
import java.util.function.BiConsumer;
277+
import java.util.function.Consumer;
278+
import java.util.function.Supplier;
279279

280280
import static java.util.Collections.emptyList;
281281
import static java.util.Collections.emptyMap;
@@ -4054,23 +4054,23 @@ public boolean isVersionGeneratedBeforeExecution() {
40544054
}
40554055

40564056
@Override
4057-
public void afterInitialize(Object entity, SharedSessionContractImplementor session) {
4057+
public void afterInitialize(Object entity, SharedSessionContractImplementor sharedSessionContractImplementor) {
40584058
if ( isPersistentAttributeInterceptable( entity ) && getRepresentationStrategy().getMode() == POJO ) {
40594059
final BytecodeLazyAttributeInterceptor interceptor = getEntityMetamodel().getBytecodeEnhancementMetadata()
40604060
.extractLazyInterceptor( entity );
40614061
assert interceptor != null;
40624062
if ( interceptor.getLinkedSession() == null ) {
4063-
interceptor.setSession( session );
4063+
interceptor.setSession( sharedSessionContractImplementor );
40644064
}
40654065
}
40664066

40674067
// clear the fields that are marked as dirty in the dirtiness tracker
40684068
processIfSelfDirtinessTracker( entity, AbstractEntityPersister::clearDirtyAttributes );
40694069
processIfManagedEntity( entity, AbstractEntityPersister::useTracker );
40704070

4071-
if ( session instanceof SessionImplementor sessionImplementor ) {
4072-
session.getFactory().getCustomEntityDirtinessStrategy()
4073-
.resetDirty( entity, this, sessionImplementor );
4071+
if ( sharedSessionContractImplementor instanceof Session session ) {
4072+
sharedSessionContractImplementor.getFactory().getCustomEntityDirtinessStrategy()
4073+
.resetDirty( entity, this, session );
40744074
}
40754075
}
40764076

hibernate-core/src/test/java/org/hibernate/orm/test/dirtiness/HHH11866Test.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@
4141
annotatedClasses = {HHH11866Test.Document.class})
4242
@ServiceRegistry(
4343
settings = {
44-
@Setting(name = AvailableSettings.SHOW_SQL, value = "true"),
45-
@Setting(name = AvailableSettings.FORMAT_SQL, value = "true"),
4644
@Setting(name = AvailableSettings.GENERATE_STATISTICS, value = "true"),
4745
@Setting(name = AvailableSettings.CUSTOM_ENTITY_DIRTINESS_STRATEGY,
4846
value = "org.hibernate.orm.test.dirtiness.HHH11866Test$EntityDirtinessStrategy")

0 commit comments

Comments
 (0)