2424import org .hibernate .engine .spi .CollectionEntry ;
2525import org .hibernate .engine .spi .EntityEntry ;
2626import org .hibernate .engine .spi .PersistenceContext ;
27- import org .hibernate .engine .spi .SessionImplementor ;
2827import org .hibernate .engine .spi .SharedSessionContractImplementor ;
2928import org .hibernate .engine .spi .Status ;
3029import org .hibernate .engine .spi .TypedValue ;
3332import org .hibernate .internal .SessionFactoryRegistry ;
3433import org .hibernate .internal .util .MarkerObject ;
3534import org .hibernate .internal .util .collections .IdentitySet ;
36- import org .hibernate .metamodel .mapping .EntityIdentifierMapping ;
3735import org .hibernate .persister .collection .CollectionPersister ;
38- import org .hibernate .resource .transaction .spi .TransactionStatus ;
3936import org .hibernate .type .BasicType ;
4037import org .hibernate .type .CompositeType ;
4138import org .hibernate .type .Type ;
4239
4340import org .checkerframework .checker .nullness .qual .Nullable ;
4441
42+ import static java .util .Collections .emptyList ;
4543import static org .hibernate .engine .internal .ForeignKeys .getEntityIdentifier ;
4644import static org .hibernate .engine .internal .ForeignKeys .getEntityIdentifierIfNotUnsaved ;
4745import static org .hibernate .engine .internal .ForeignKeys .isNotTransient ;
@@ -148,6 +146,11 @@ protected final void read() {
148146 initialize ( false );
149147 }
150148
149+ private CollectionEntry getCollectionEntry () {
150+ return session .getPersistenceContextInternal ()
151+ .getCollectionEntry ( this );
152+ }
153+
151154 /**
152155 * Called by the {@link Collection#size} method
153156 */
@@ -159,10 +162,9 @@ protected boolean readSize() {
159162 else {
160163 return withTemporarySessionIfNeeded (
161164 () -> {
162- final CollectionEntry entry =
163- session .getPersistenceContextInternal ().getCollectionEntry ( this );
165+ final var entry = getCollectionEntry ();
164166 if ( entry != null ) {
165- final CollectionPersister persister = entry .getLoadedPersister ();
167+ final var persister = entry .getLoadedPersister ();
166168 checkPersister ( this , persister );
167169 if ( persister .isExtraLazy () ) {
168170 // TODO: support for extra-lazy collections was
@@ -193,7 +195,7 @@ public int getSize() {
193195 return cachedSize ;
194196 }
195197 else {
196- final CollectionEntry entry = session . getPersistenceContextInternal (). getCollectionEntry ( this );
198+ final var entry = getCollectionEntry ();
197199 if ( entry == null ) {
198200 throwLazyInitializationExceptionIfNotConnected ();
199201 throwLazyInitializationException ( "collection not associated with session" );
@@ -273,8 +275,8 @@ else if ( !session.isConnected() ) {
273275 session .beginTransaction ();
274276 }
275277
276- final CollectionPersister collectionDescriptor =
277- session .getSessionFactory ().getMappingMetamodel ()
278+ final var collectionDescriptor =
279+ session .getFactory ().getMappingMetamodel ()
278280 .getCollectionDescriptor ( getRole () );
279281 session .getPersistenceContextInternal ()
280282 .addUninitializedDetachedCollection ( collectionDescriptor , this );
@@ -309,7 +311,7 @@ else if ( !session.isConnected() ) {
309311 }
310312
311313 private boolean unfinishedLoading () {
312- final PersistenceContext persistenceContext = session .getPersistenceContext ();
314+ final var persistenceContext = session .getPersistenceContext ();
313315 return persistenceContext .hasLoadContext ()
314316 && !persistenceContext .getLoadContexts ().isLoadingFinished ();
315317 }
@@ -319,8 +321,7 @@ private SharedSessionContractImplementor openTemporarySessionForLoading() {
319321 throwLazyInitializationException ( "SessionFactory UUID not known; cannot create temporary session for loading" );
320322 }
321323
322- final SessionImplementor session =
323- SessionFactoryRegistry .INSTANCE .getSessionFactory ( sessionFactoryUuid ).openSession ();
324+ final var session = SessionFactoryRegistry .INSTANCE .getSessionFactory ( sessionFactoryUuid ).openSession ();
324325 session .getPersistenceContextInternal ().setDefaultReadOnly ( true );
325326 session .setHibernateFlushMode ( FlushMode .MANUAL );
326327 return session ;
@@ -330,8 +331,8 @@ protected Boolean readIndexExistence(final Object index) {
330331 if ( !initialized ) {
331332 return withTemporarySessionIfNeeded (
332333 () -> {
333- final CollectionEntry entry = session . getPersistenceContextInternal (). getCollectionEntry ( this );
334- final CollectionPersister persister = entry .getLoadedPersister ();
334+ final var entry = getCollectionEntry ();
335+ final var persister = entry .getLoadedPersister ();
335336 checkPersister ( this , persister );
336337 if ( persister .isExtraLazy () ) {
337338 if ( hasQueuedOperations () ) {
@@ -353,8 +354,8 @@ protected Boolean readElementExistence(final Object element) {
353354 if ( !initialized ) {
354355 return withTemporarySessionIfNeeded (
355356 () -> {
356- final CollectionEntry entry = session . getPersistenceContextInternal (). getCollectionEntry ( this );
357- final CollectionPersister persister = entry .getLoadedPersister ();
357+ final var entry = getCollectionEntry ();
358+ final var persister = entry .getLoadedPersister ();
358359 checkPersister ( this , persister );
359360 if ( persister .isExtraLazy () ) {
360361 if ( hasQueuedOperations () ) {
@@ -374,7 +375,7 @@ protected Boolean readElementExistence(final Object element) {
374375
375376 @ Override
376377 public boolean elementExists (Object element ) {
377- final CollectionEntry entry = session . getPersistenceContextInternal (). getCollectionEntry ( this );
378+ final var entry = getCollectionEntry ();
378379 if ( entry == null ) {
379380 throwLazyInitializationExceptionIfNotConnected ();
380381 throwLazyInitializationException ( "collection not associated with session" );
@@ -384,7 +385,8 @@ public boolean elementExists(Object element) {
384385 if ( hasQueuedOperations () ) {
385386 session .flush ();
386387 }
387- return entry .getLoadedPersister ().elementExists ( entry .getLoadedKey (), element , session );
388+ return entry .getLoadedPersister ()
389+ .elementExists ( entry .getLoadedKey (), element , session );
388390 }
389391 }
390392
@@ -398,10 +400,8 @@ class ExtraLazyElementByIndexReader implements LazyInitializationWork<Object> {
398400
399401 @ Override
400402 public Object doWork () {
401- final CollectionEntry entry =
402- session .getPersistenceContextInternal ()
403- .getCollectionEntry ( AbstractPersistentCollection .this );
404- final CollectionPersister persister = entry .getLoadedPersister ();
403+ final var entry = getCollectionEntry ();
404+ final var persister = entry .getLoadedPersister ();
405405 checkPersister ( AbstractPersistentCollection .this , persister );
406406 isExtraLazy = persister .isExtraLazy ();
407407 if ( isExtraLazy ) {
@@ -429,7 +429,7 @@ public Object doWork() {
429429
430430 @ Override
431431 public Object elementByIndex (Object index ) {
432- final CollectionEntry entry = session . getPersistenceContextInternal (). getCollectionEntry ( this );
432+ final var entry = getCollectionEntry ();
433433 if ( entry == null ) {
434434 throwLazyInitializationExceptionIfNotConnected ();
435435 throwLazyInitializationException ( "collection not associated with session" );
@@ -439,7 +439,8 @@ public Object elementByIndex(Object index) {
439439 if ( hasQueuedOperations () ) {
440440 session .flush ();
441441 }
442- return entry .getLoadedPersister ().getElementByIndex ( entry .getLoadedKey (), index , session , owner );
442+ return entry .getLoadedPersister ()
443+ .getElementByIndex ( entry .getLoadedKey (), index , session , owner );
443444 }
444445 }
445446
@@ -501,34 +502,40 @@ && isConnectedToSession()
501502 * Is this the "inverse" end of a bidirectional association?
502503 */
503504 protected boolean isInverseCollection () {
504- final CollectionEntry ce = session . getPersistenceContextInternal (). getCollectionEntry ( this );
505- return ce != null && ce .getLoadedPersister ().isInverse ();
505+ final var entry = getCollectionEntry ();
506+ return entry != null && entry .getLoadedPersister ().isInverse ();
506507 }
507508
508509 /**
509510 * Is this the "inverse" end of a bidirectional association with
510511 * no orphan delete enabled?
511512 */
512513 protected boolean isInverseCollectionNoOrphanDelete () {
513- final CollectionEntry ce = session . getPersistenceContextInternal (). getCollectionEntry ( this );
514- if ( ce == null ) {
514+ final var entry = getCollectionEntry ();
515+ if ( entry == null ) {
515516 return false ;
516517 }
517- final CollectionPersister loadedPersister = ce .getLoadedPersister ();
518- return loadedPersister .isInverse () && !loadedPersister .hasOrphanDelete ();
518+ else {
519+ final var loadedPersister = entry .getLoadedPersister ();
520+ return loadedPersister .isInverse ()
521+ && !loadedPersister .hasOrphanDelete ();
522+ }
519523 }
520524
521525 /**
522526 * Is this the "inverse" end of a bidirectional one-to-many, or
523527 * of a collection with no orphan delete?
524528 */
525529 protected boolean isInverseOneToManyOrNoOrphanDelete () {
526- final CollectionEntry ce = session . getPersistenceContextInternal (). getCollectionEntry ( this );
527- if ( ce == null ) {
530+ final var entry = getCollectionEntry ();
531+ if ( entry == null ) {
528532 return false ;
529533 }
530- final CollectionPersister loadedPersister = ce .getLoadedPersister ();
531- return loadedPersister .isInverse () && ( loadedPersister .isOneToMany () || !loadedPersister .hasOrphanDelete () );
534+ else {
535+ final var loadedPersister = entry .getLoadedPersister ();
536+ return loadedPersister .isInverse ()
537+ && ( loadedPersister .isOneToMany () || !loadedPersister .hasOrphanDelete () );
538+ }
532539 }
533540
534541 /**
@@ -550,7 +557,7 @@ protected final void queueOperation(DelayedOperation<E> operation) {
550557 * merged to managed copy.
551558 */
552559 public final void replaceQueuedOperationValues (CollectionPersister persister , Map <Object ,Object > copyCache ) {
553- for ( DelayedOperation <?> operation : operationQueue ) {
560+ for ( var operation : operationQueue ) {
554561 if ( operation instanceof ValueDelayedOperation <?> valueDelayedOperation ) {
555562 valueDelayedOperation .replace ( persister , copyCache );
556563 }
@@ -660,7 +667,7 @@ private static void throwLazyInitializationException(String role, String message
660667 );
661668 }
662669
663- public static void checkPersister (PersistentCollection collection , CollectionPersister persister ) {
670+ public static void checkPersister (PersistentCollection <?> collection , CollectionPersister persister ) {
664671 if ( !collection .wasInitialized () && persister == null ) {
665672 throwLazyInitializationException ( null , "collection is being removed" );
666673 }
@@ -732,19 +739,19 @@ private void logDiscardedQueuedOperations() {
732739 }
733740
734741 private boolean wasTransactionRolledBack () {
735- final TransactionStatus status =
736- session .getTransactionCoordinator ().getTransactionDriverControl ().getStatus ();
737- return status .isOneOf ( ROLLED_BACK , MARKED_ROLLBACK , FAILED_COMMIT , FAILED_ROLLBACK , ROLLING_BACK );
742+ return session .getTransactionCoordinator ().getTransactionDriverControl ().getStatus ()
743+ .isOneOf ( ROLLED_BACK , MARKED_ROLLBACK , FAILED_COMMIT , FAILED_ROLLBACK , ROLLING_BACK );
738744 }
739745
740746 protected void prepareForPossibleLoadingOutsideTransaction () {
741747 if ( session != null ) {
748+ final var factory = session .getFactory ();
742749 allowLoadOutsideTransaction =
743- session . getFactory () .getSessionFactoryOptions ()
750+ factory .getSessionFactoryOptions ()
744751 .isInitializeLazyStateOutsideTransactionsEnabled ();
745752
746753 if ( allowLoadOutsideTransaction && sessionFactoryUuid == null ) {
747- sessionFactoryUuid = session . getFactory () .getUuid ();
754+ sessionFactoryUuid = factory .getUuid ();
748755 }
749756 }
750757 }
@@ -755,14 +762,14 @@ public final boolean setCurrentSession(SharedSessionContractImplementor session)
755762 return false ;
756763 }
757764 else if ( this .session != null ) {
758- final String msg = unexpectedSessionStateMessage ( session );
765+ final String message = unexpectedSessionStateMessage ( session );
759766 if ( isConnectedToSession () ) {
760767 throw new HibernateException (
761- "Illegal attempt to associate a collection with two open sessions: " + msg
768+ "Illegal attempt to associate a collection with two open sessions: " + message
762769 );
763770 }
764771 else {
765- LOG .logUnexpectedSessionInCollectionNotConnected ( msg );
772+ LOG .logUnexpectedSessionInCollectionNotConnected ( message );
766773 }
767774 }
768775 if ( hasQueuedOperations () ) {
@@ -784,14 +791,14 @@ private String unexpectedSessionStateMessage(SharedSessionContractImplementor se
784791 final String roleCurrent = role ;
785792 final Object keyCurrent = key ;
786793
787- final StringBuilder message = new StringBuilder ( "Collection : " );
794+ final var message = new StringBuilder ( "Collection : " );
788795 if ( roleCurrent != null ) {
789796 message .append ( collectionInfoString ( roleCurrent , keyCurrent ) );
790797 }
791798 else {
792- final CollectionEntry ce = session .getPersistenceContextInternal ().getCollectionEntry ( this );
793- if ( ce != null ) {
794- message .append ( collectionInfoString ( ce .getLoadedPersister (), this , ce .getLoadedKey (), session ) );
799+ final var entry = session .getPersistenceContextInternal ().getCollectionEntry ( this );
800+ if ( entry != null ) {
801+ message .append ( collectionInfoString ( entry .getLoadedPersister (), this , entry .getLoadedKey (), session ) );
795802 }
796803 else {
797804 message .append ( "<unknown>" );
@@ -818,9 +825,10 @@ public boolean needsRecreate(CollectionPersister persister) {
818825 // Selecting a type used in where part of update statement
819826 // (must match condition in org.hibernate.persister.collection.BasicCollectionPersister#doUpdateRows).
820827 // See HHH-9474
821- final Type whereType = persister .hasIndex ()
822- ? persister .getIndexType ()
823- : persister .getElementType ();
828+ final Type whereType =
829+ persister .hasIndex ()
830+ ? persister .getIndexType ()
831+ : persister .getElementType ();
824832 return whereType instanceof CompositeType compositeType
825833 && compositeType .hasNullProperty ();
826834 }
@@ -890,14 +898,14 @@ public final Collection<E> getQueuedOrphans(String entityName) {
890898 if ( hasQueuedOperations () ) {
891899 final Collection <E > additions = new ArrayList <>( operationQueue .size () );
892900 final Collection <E > removals = new ArrayList <>( operationQueue .size () );
893- for ( DelayedOperation < E > operation : operationQueue ) {
901+ for ( var operation : operationQueue ) {
894902 additions .add ( operation .getAddedInstance () );
895903 removals .add ( operation .getOrphan () );
896904 }
897905 return getOrphans ( removals , additions , entityName , session );
898906 }
899907 else {
900- return Collections . emptyList ();
908+ return emptyList ();
901909 }
902910 }
903911
@@ -1364,16 +1372,16 @@ public static void identityRemove(
13641372 SharedSessionContractImplementor session ) {
13651373 if ( entityInstance != null
13661374 && isNotTransient ( entityName , entityInstance , null , session ) ) {
1367- final EntityIdentifierMapping identifierMapping =
1375+ final var identifierMapping =
13681376 session .getFactory ().getMappingMetamodel ()
13691377 .getEntityDescriptor ( entityName )
13701378 .getIdentifierMapping ();
13711379 final Object idOfCurrent = getEntityIdentifierIfNotUnsaved ( entityName , entityInstance , session );
1372- final Iterator <?> itr = list .iterator ();
1373- while ( itr .hasNext () ) {
1374- final Object idOfOld = getEntityIdentifierIfNotUnsaved ( entityName , itr .next (), session );
1380+ final var iterator = list .iterator ();
1381+ while ( iterator .hasNext () ) {
1382+ final Object idOfOld = getEntityIdentifierIfNotUnsaved ( entityName , iterator .next (), session );
13751383 if ( identifierMapping .areEqual ( idOfCurrent , idOfOld , session ) ) {
1376- itr .remove ();
1384+ iterator .remove ();
13771385 break ;
13781386 }
13791387 }
0 commit comments