Skip to content

Commit 073ecb3

Browse files
committed
[hibernate#1831] Upgrade Hibernate ORM to 6.4.1.Final
Some minor changes in AbstractEntityInitializer caused compilation and runtime errors in Hibernate Reactive.
1 parent f9ea159 commit 073ecb3

File tree

6 files changed

+42
-48
lines changed

6 files changed

+42
-48
lines changed

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ version = projectVersion
5353
// ./gradlew clean build -PhibernateOrmVersion=5.6.15-SNAPSHOT
5454
ext {
5555
if ( !project.hasProperty('hibernateOrmVersion') ) {
56-
hibernateOrmVersion = '6.4.0.Final'
56+
hibernateOrmVersion = '6.4.1.Final'
5757
}
5858
if ( !project.hasProperty( 'hibernateOrmGradlePluginVersion' ) ) {
5959
// Same as ORM as default

hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactiveLoadEventListener.java

-2
Original file line numberDiff line numberDiff line change
@@ -380,8 +380,6 @@ private CompletionStage<Object> loadWithRegularProxy(LoadEvent event, EntityPers
380380
return narrowedProxy( event, persister, keyToLoad, options, proxy );
381381
}
382382
else if ( options.isAllowProxyCreation() ) {
383-
// return a new proxy
384-
// ORM calls DefaultLoadEventListener#proxyOrCache
385383
return completedFuture( proxyOrCached( event, persister, keyToLoad, options ) );
386384
}
387385
else {

hibernate-reactive-core/src/main/java/org/hibernate/reactive/event/impl/DefaultReactivePostLoadEventListener.java

+7-4
Original file line numberDiff line numberDiff line change
@@ -43,21 +43,24 @@ public void onPostLoad(PostLoadEvent event) {
4343
callbackRegistry.postLoad( entity );
4444

4545
final EventSource session = event.getSession();
46-
final EntityEntry entry = session.getPersistenceContextInternal().getEntry( entity );
46+
final EntityEntry entry = session.getPersistenceContextInternal().getEntry( entity );
4747
if ( entry == null ) {
4848
throw new AssertionFailure( "possible non-threadsafe access to the session" );
4949
}
5050

51-
final ReactiveActionQueue actionQueue = ((ReactiveSession) session).getReactiveActionQueue();
51+
final ReactiveActionQueue actionQueue = ( (ReactiveSession) session ).getReactiveActionQueue();
5252
switch ( entry.getLockMode() ) {
53-
// case PESSIMISTIC_FORCE_INCREMENT:
54-
// This case is handled by DefaultReactiveLoadEventListener
53+
case PESSIMISTIC_FORCE_INCREMENT:
54+
// This case is handled by DefaultReactiveLoadEventListener
55+
break;
5556
case OPTIMISTIC_FORCE_INCREMENT:
5657
actionQueue.registerProcess( new ReactiveEntityIncrementVersionProcess( entity ) );
5758
break;
5859
case OPTIMISTIC:
5960
actionQueue.registerProcess( new ReactiveEntityVerifyVersionProcess( entity ) );
6061
break;
62+
default:
63+
// Nothing to do
6164
}
6265
}
6366

hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/graph/entity/ReactiveAbstractEntityInitializer.java

+17-30
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,23 @@ public CompletionStage<Void> reactiveInitializeInstance(ReactiveRowProcessingSta
8787
return voidFuture()
8888
.thenCompose( v -> {
8989
if ( lazyInitializer != null ) {
90-
return lazyInitialize( rowProcessingState, lazyInitializer );
90+
final SharedSessionContractImplementor session = rowProcessingState.getSession();
91+
final PersistenceContext persistenceContext = session.getPersistenceContextInternal();
92+
final EntityHolder holder = persistenceContext.getEntityHolder( getEntityKey() );
93+
Object instance = holder.getEntity();
94+
assert instance != null : "The real entity instance must be resolved in the `resolveInstance()` phase";
95+
if ( holder.getEntityInitializer() == this ) {
96+
return initializeEntity( instance, rowProcessingState )
97+
.thenAccept( vv -> {
98+
lazyInitializer.setImplementation( instance );
99+
setEntityInstanceForNotify( instance );
100+
} );
101+
}
102+
return voidFuture().thenAccept( vv -> {
103+
lazyInitializer.setImplementation( instance );
104+
setEntityInstanceForNotify( instance );
105+
106+
} );
91107
}
92108
else {
93109
// FIXME: Read from cache if possible
@@ -103,35 +119,6 @@ public CompletionStage<Void> reactiveInitializeInstance(ReactiveRowProcessingSta
103119
return voidFuture();
104120
}
105121

106-
private CompletionStage<Void> lazyInitialize(ReactiveRowProcessingState rowProcessingState, LazyInitializer lazyInitializer) {
107-
final SharedSessionContractImplementor session = rowProcessingState.getSession();
108-
final PersistenceContext persistenceContext = session.getPersistenceContextInternal();
109-
final EntityHolder holder = persistenceContext.getEntityHolder( getEntityKey() );
110-
Object instance = holder.getEntity();
111-
if ( instance == null ) {
112-
return resolveInstance( rowProcessingState, lazyInitializer, persistenceContext );
113-
}
114-
lazyInitializer.setImplementation( instance );
115-
setEntityInstanceForNotify( instance );
116-
return voidFuture();
117-
}
118-
119-
private CompletionStage<Void> resolveInstance(
120-
ReactiveRowProcessingState rowProcessingState,
121-
LazyInitializer lazyInitializer,
122-
PersistenceContext persistenceContext) {
123-
final Object instance = super.resolveInstance(
124-
getEntityKey().getIdentifier(),
125-
persistenceContext.getEntityHolder( getEntityKey() ),
126-
rowProcessingState
127-
);
128-
return initializeEntity( instance, rowProcessingState )
129-
.thenAccept( v -> {
130-
lazyInitializer.setImplementation( instance );
131-
setEntityInstanceForNotify( instance );
132-
} );
133-
}
134-
135122
private CompletionStage<Void> initializeEntity(Object toInitialize, RowProcessingState rowProcessingState) {
136123
if ( !skipInitialization( toInitialize, rowProcessingState ) ) {
137124
assert consistentInstance( toInitialize, rowProcessingState );

hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/graph/entity/internal/ReactiveEntitySelectFetchByUniqueKeyInitializer.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -41,28 +41,29 @@ public ReactiveEntitySelectFetchByUniqueKeyInitializer(
4141

4242
@Override
4343
public CompletionStage<Void> reactiveInitializeInstance(ReactiveRowProcessingState rowProcessingState) {
44-
if ( entityInstance != null || isInitialized ) {
44+
if ( getEntityInstance() != null || isEntityInitialized() ) {
4545
return voidFuture();
4646
}
47+
state = State.RESOLVED;
4748

4849
final EntityInitializer parentEntityInitializer = getParentEntityInitializer( parentAccess );
4950
if ( parentEntityInitializer != null && parentEntityInitializer.getEntityKey() != null ) {
5051
// make sure parentEntityInitializer.resolveInstance has been called before
5152
parentEntityInitializer.resolveInstance( rowProcessingState );
5253
if ( parentEntityInitializer.isEntityInitialized() ) {
53-
isInitialized = true;
54+
initializeState();
5455
return voidFuture();
5556
}
5657
}
5758

5859
if ( !isAttributeAssignableToConcreteDescriptor() ) {
59-
isInitialized = true;
60+
initializeState();
6061
return voidFuture();
6162
}
6263

6364
final Object entityIdentifier = keyAssembler.assemble( rowProcessingState );
6465
if ( entityIdentifier == null ) {
65-
isInitialized = true;
66+
initializeState();
6667
return voidFuture();
6768
}
6869
final String entityName = concreteDescriptor.getEntityName();
@@ -104,7 +105,7 @@ public CompletionStage<Void> reactiveInitializeInstance(ReactiveRowProcessingSta
104105
if ( entityInstance != null ) {
105106
setEntityInstance( persistenceContext.proxyFor( entityInstance ) );
106107
}
107-
isInitialized = true;
108+
initializeState();
108109
return voidFuture();
109110
}
110111

hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/graph/entity/internal/ReactiveEntitySelectFetchInitializer.java

+11-6
Original file line numberDiff line numberDiff line change
@@ -102,17 +102,18 @@ public CompletionStage<Void> reactiveInitializeInstance(ReactiveRowProcessingSta
102102

103103
final EntityInitializer parentEntityInitializer = parentAccess.findFirstEntityInitializer();
104104
if ( parentEntityInitializer != null && parentEntityInitializer.isEntityInitialized() ) {
105-
isInitialized = true;
105+
initializeState();
106106
return voidFuture();
107107
}
108108

109109
if ( !isAttributeAssignableToConcreteDescriptor() ) {
110+
initializeState();
110111
return voidFuture();
111112
}
112113

113114
final Object entityIdentifier = keyAssembler.assemble( rowProcessingState );
114115
if ( entityIdentifier == null ) {
115-
isInitialized = true;
116+
initializeState();
116117
return voidFuture();
117118
}
118119

@@ -145,7 +146,7 @@ public CompletionStage<Void> reactiveInitializeInstance(ReactiveRowProcessingSta
145146
entityInstance = holder.getEntity();
146147
if ( holder.getEntityInitializer() == null ) {
147148
if ( entityInstance != null && Hibernate.isInitialized( entityInstance ) ) {
148-
isInitialized = true;
149+
initializeState();
149150
return voidFuture();
150151
}
151152
}
@@ -159,11 +160,11 @@ else if ( holder.getEntityInitializer() != this ) {
159160
holder.getEntityInitializer()
160161
);
161162
}
162-
isInitialized = true;
163+
initializeState();
163164
return voidFuture();
164165
}
165166
else if ( entityInstance == null ) {
166-
isInitialized = true;
167+
initializeState();
167168
return voidFuture();
168169
}
169170
}
@@ -202,11 +203,15 @@ else if ( entityInstance == null ) {
202203
if ( lazyInitializer != null ) {
203204
lazyInitializer.setUnwrap( unwrapProxy );
204205
}
205-
isInitialized = true;
206+
initializeState();
206207
return voidFuture();
207208
} );
208209
}
209210

211+
protected void initializeState() {
212+
state = State.INITIALIZED;
213+
}
214+
210215
protected ToOneAttributeMapping toOneMapping() {
211216
return (ToOneAttributeMapping) getInitializedPart();
212217
}

0 commit comments

Comments
 (0)