Skip to content

Commit 5e645e1

Browse files
committed
[#2230] Small refactoring
Make the structure of the code more similar to the one in Hibernate ORM (See EntityInitializerImpl)
1 parent d606324 commit 5e645e1

File tree

1 file changed

+51
-70
lines changed

1 file changed

+51
-70
lines changed

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

Lines changed: 51 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -254,82 +254,63 @@ public CompletionStage<Void> reactiveResolveInstance(EntityInitializerData origi
254254
}
255255
final RowProcessingState rowProcessingState = data.getRowProcessingState();
256256
data.setState( State.RESOLVED );
257-
return assembleId( data, rowProcessingState )
258-
.thenCompose( unused -> {
259-
if ( data.getState() == State.MISSING ) {
260-
return voidFuture();
261-
}
262-
else {
263-
final PersistenceContext persistenceContext = rowProcessingState
264-
.getSession().getPersistenceContextInternal();
265-
data.setEntityHolder( persistenceContext.claimEntityHolderIfPossible(
266-
data.getEntityKey(),
267-
null,
268-
rowProcessingState.getJdbcValuesSourceProcessingState(),
269-
this
270-
) );
271-
272-
if ( useEmbeddedIdentifierInstanceAsEntity( data ) ) {
273-
data.setEntityInstanceForNotify( rowProcessingState.getEntityId() );
274-
data.setInstance( data.getEntityInstanceForNotify() );
275-
}
276-
else {
277-
return reactiveResolveEntityInstance1( data )
278-
.thenAccept( v -> {
279-
if ( data.getUniqueKeyAttributePath() != null ) {
280-
final SharedSessionContractImplementor session = rowProcessingState.getSession();
281-
final EntityPersister concreteDescriptor = getConcreteDescriptor( data );
282-
final EntityUniqueKey euk = new EntityUniqueKey(
283-
concreteDescriptor.getEntityName(),
284-
data.getUniqueKeyAttributePath(),
285-
rowProcessingState.getEntityUniqueKey(),
286-
data.getUniqueKeyPropertyTypes()[concreteDescriptor.getSubclassId()],
287-
session.getFactory()
288-
);
289-
session.getPersistenceContextInternal().addEntity(
290-
euk,
291-
data.getInstance()
292-
);
293-
}
294-
postResolveInstance( data );
295-
} );
257+
if ( data.getEntityKey() == null ) {
258+
return assembleId( rowProcessingState )
259+
.thenCompose( id -> {
260+
if ( id == null ) {
261+
setMissing( data );
262+
return voidFuture();
296263
}
297-
postResolveInstance( data );
298-
return voidFuture();
299-
}
300-
} );
264+
resolveEntityKey( data, id );
265+
return postAssembleId( rowProcessingState, data );
266+
} );
267+
}
268+
return postAssembleId( rowProcessingState, data );
301269
}
302270

303-
private CompletionStage<Void> assembleId(
304-
ReactiveEntityInitializerData data,
305-
RowProcessingState rowProcessingState) {
306-
if ( data.getEntityKey() == null ) {
307-
DomainResultAssembler<?> identifierAssembler = getIdentifierAssembler();
308-
assert identifierAssembler != null;
309-
if ( identifierAssembler instanceof ReactiveDomainResultsAssembler<?> reactiveAssembler ) {
310-
return reactiveAssembler
311-
.reactiveAssemble( (ReactiveRowProcessingState) rowProcessingState )
312-
.thenAccept( id -> {
313-
if ( id == null ) {
314-
setMissing( data );
315-
return ;
316-
}
317-
resolveEntityKey( data, id );
318-
} );
319-
}
320-
else {
321-
final Object id = identifierAssembler.assemble( rowProcessingState );
322-
if ( id == null ) {
323-
setMissing( data );
324-
return voidFuture();
325-
}
326-
resolveEntityKey( data, id );
327-
return voidFuture();
328-
}
271+
private CompletionStage<Void> postAssembleId(RowProcessingState rowProcessingState, ReactiveEntityInitializerData data) {
272+
final PersistenceContext persistenceContext = rowProcessingState.getSession().getPersistenceContextInternal();
273+
data.setEntityHolder( persistenceContext.claimEntityHolderIfPossible(
274+
data.getEntityKey(),
275+
null,
276+
rowProcessingState.getJdbcValuesSourceProcessingState(),
277+
this
278+
) );
279+
280+
if ( useEmbeddedIdentifierInstanceAsEntity( data ) ) {
281+
data.setEntityInstanceForNotify( rowProcessingState.getEntityId() );
282+
data.setInstance( data.getEntityInstanceForNotify() );
283+
postResolveInstance( data );
284+
return voidFuture();
329285
}
330-
return voidFuture();
286+
287+
return reactiveResolveEntityInstance1( data )
288+
.thenAccept( v -> {
289+
if ( data.getUniqueKeyAttributePath() != null ) {
290+
final SharedSessionContractImplementor session = rowProcessingState.getSession();
291+
final EntityPersister concreteDescriptor = getConcreteDescriptor( data );
292+
final EntityUniqueKey euk = new EntityUniqueKey(
293+
concreteDescriptor.getEntityName(),
294+
data.getUniqueKeyAttributePath(),
295+
rowProcessingState.getEntityUniqueKey(),
296+
data.getUniqueKeyPropertyTypes()[concreteDescriptor.getSubclassId()],
297+
session.getFactory()
298+
);
299+
session.getPersistenceContextInternal().addEntity( euk, data.getInstance() );
300+
}
301+
postResolveInstance( data );
302+
} );
303+
}
304+
305+
private CompletionStage<?> assembleId(RowProcessingState rowProcessingState) {
306+
final DomainResultAssembler<?> identifierAssembler = getIdentifierAssembler();
307+
assert identifierAssembler != null;
308+
return identifierAssembler instanceof ReactiveDomainResultsAssembler<?> reactiveAssembler
309+
? reactiveAssembler.reactiveAssemble( (ReactiveRowProcessingState) rowProcessingState )
310+
: completedFuture( identifierAssembler.assemble( rowProcessingState ) );
331311
}
332312

313+
// We could move this method in ORM
333314
private void postResolveInstance(ReactiveEntityInitializerData data) {
334315
if ( data.getInstance() != null ) {
335316
upgradeLockMode( data );

0 commit comments

Comments
 (0)