Skip to content

Commit fbc96ab

Browse files
committed
use 'var' in AbstractPersistentCollection and StatefulPersistenceContext
also improve an error message
1 parent 2d6921b commit fbc96ab

File tree

4 files changed

+237
-244
lines changed

4 files changed

+237
-244
lines changed

hibernate-core/src/main/java/org/hibernate/collection/spi/AbstractPersistentCollection.java

Lines changed: 66 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import org.hibernate.engine.spi.CollectionEntry;
2525
import org.hibernate.engine.spi.EntityEntry;
2626
import org.hibernate.engine.spi.PersistenceContext;
27-
import org.hibernate.engine.spi.SessionImplementor;
2827
import org.hibernate.engine.spi.SharedSessionContractImplementor;
2928
import org.hibernate.engine.spi.Status;
3029
import org.hibernate.engine.spi.TypedValue;
@@ -33,15 +32,14 @@
3332
import org.hibernate.internal.SessionFactoryRegistry;
3433
import org.hibernate.internal.util.MarkerObject;
3534
import org.hibernate.internal.util.collections.IdentitySet;
36-
import org.hibernate.metamodel.mapping.EntityIdentifierMapping;
3735
import org.hibernate.persister.collection.CollectionPersister;
38-
import org.hibernate.resource.transaction.spi.TransactionStatus;
3936
import org.hibernate.type.BasicType;
4037
import org.hibernate.type.CompositeType;
4138
import org.hibernate.type.Type;
4239

4340
import org.checkerframework.checker.nullness.qual.Nullable;
4441

42+
import static java.util.Collections.emptyList;
4543
import static org.hibernate.engine.internal.ForeignKeys.getEntityIdentifier;
4644
import static org.hibernate.engine.internal.ForeignKeys.getEntityIdentifierIfNotUnsaved;
4745
import 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

Comments
 (0)