Skip to content

Commit aa4954b

Browse files
Sannestliu
authored andcommitted
HHH-6862 Improve API of IdentityMap helpers to match actual use cases
1 parent 67d1c70 commit aa4954b

File tree

3 files changed

+18
-22
lines changed

3 files changed

+18
-22
lines changed

hibernate-core/src/main/java/org/hibernate/engine/internal/StatefulPersistenceContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1162,7 +1162,7 @@ && isFoundInParent( propertyName, childEntity, persister, collectionPersister, p
11621162

11631163
//not found in case, proceed
11641164
// iterate all the entities currently associated with the persistence context.
1165-
Iterator<Entry<Object,EntityEntry>> entities = IdentityMap.entries(entityEntries).iterator();
1165+
Iterator<Entry<Object,EntityEntry>> entities = IdentityMap.entriesIterator( entityEntries );
11661166
while ( entities.hasNext() ) {
11671167
final Map.Entry<Object,EntityEntry> me = entities.next();
11681168
final EntityEntry entityEntry = me.getValue();
@@ -1286,7 +1286,7 @@ public Object getIndexInOwner(String entity, String property, Object childEntity
12861286
}
12871287

12881288
//Not found in cache, proceed
1289-
Iterator<Entry<Object,EntityEntry>> entities = IdentityMap.entries(entityEntries).iterator();
1289+
Iterator<Entry<Object,EntityEntry>> entities = IdentityMap.entriesIterator( entityEntries );
12901290
while ( entities.hasNext() ) {
12911291
Map.Entry<Object,EntityEntry> me = entities.next();
12921292
EntityEntry ee = me.getValue();

hibernate-core/src/main/java/org/hibernate/event/internal/AbstractFlushingEventListener.java

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525

2626
import java.io.Serializable;
2727
import java.util.Iterator;
28-
import java.util.List;
2928
import java.util.Map;
3029

3130
import org.jboss.logging.Logger;
@@ -187,11 +186,10 @@ private void prepareCollectionFlushes(PersistenceContext persistenceContext) thr
187186

188187
LOG.debug( "Dirty checking collections" );
189188

190-
final List list = IdentityMap.entries( persistenceContext.getCollectionEntries() );
191-
final int size = list.size();
192-
for ( int i = 0; i < size; i++ ) {
193-
Map.Entry e = ( Map.Entry ) list.get( i );
194-
( (CollectionEntry) e.getValue() ).preFlush( (PersistentCollection) e.getKey() );
189+
Iterator<Map.Entry<PersistentCollection,CollectionEntry>> entriesIterator = IdentityMap.entriesIterator( persistenceContext.getCollectionEntries() );
190+
while ( entriesIterator.hasNext() ) {
191+
Map.Entry<PersistentCollection,CollectionEntry> e = entriesIterator.next();
192+
e.getValue().preFlush( e.getKey() );
195193
}
196194
}
197195

@@ -248,27 +246,25 @@ private void flushCollections(final EventSource session, final PersistenceContex
248246

249247
LOG.trace( "Processing unreferenced collections" );
250248

251-
List list = IdentityMap.entries( persistenceContext.getCollectionEntries() );
252-
int size = list.size();
253-
for ( int i = 0; i < size; i++ ) {
254-
Map.Entry me = ( Map.Entry ) list.get( i );
255-
CollectionEntry ce = (CollectionEntry) me.getValue();
249+
Iterator<Map.Entry<PersistentCollection,CollectionEntry>> entriesIterator = IdentityMap.entriesIterator( persistenceContext.getCollectionEntries() );
250+
while ( entriesIterator.hasNext() ) {
251+
Map.Entry<PersistentCollection,CollectionEntry> me = entriesIterator.next();
252+
CollectionEntry ce = me.getValue();
256253
if ( !ce.isReached() && !ce.isIgnore() ) {
257-
Collections.processUnreachableCollection( (PersistentCollection) me.getKey(), session );
254+
Collections.processUnreachableCollection( me.getKey(), session );
258255
}
259256
}
260257

261258
// Schedule updates to collections:
262259

263260
LOG.trace( "Scheduling collection removes/(re)creates/updates" );
264261

265-
list = IdentityMap.entries( persistenceContext.getCollectionEntries() );
266-
size = list.size();
262+
entriesIterator = IdentityMap.entriesIterator( persistenceContext.getCollectionEntries() );
267263
ActionQueue actionQueue = session.getActionQueue();
268-
for ( int i = 0; i < size; i++ ) {
269-
Map.Entry me = (Map.Entry) list.get(i);
270-
PersistentCollection coll = (PersistentCollection) me.getKey();
271-
CollectionEntry ce = (CollectionEntry) me.getValue();
264+
while ( entriesIterator.hasNext() ) {
265+
Map.Entry<PersistentCollection,CollectionEntry> me = entriesIterator.next();
266+
PersistentCollection coll = me.getKey();
267+
CollectionEntry ce = me.getValue();
272268

273269
if ( ce.isDorecreate() ) {
274270
session.getInterceptor().onCollectionRecreate( coll, ce.getCurrentKey() );

hibernate-core/src/main/java/org/hibernate/internal/util/collections/IdentityMap.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ public static <K,V> Map.Entry<K,V>[] concurrentEntries(Map<K,V> map) {
9090
return ( (IdentityMap<K,V>) map ).entryArray();
9191
}
9292

93-
public static <K,V> List<Entry<K,V>> entries(Map<K,V> map) {
94-
return ( (IdentityMap<K,V>) map ).entryList();
93+
public static <K,V> Iterator<Map.Entry<K,V>> entriesIterator(Map<K,V> map) {
94+
return ( (IdentityMap<K,V>) map ).entryList().iterator();
9595
}
9696

9797
public static <K,V> Iterator<K> keyIterator(Map<K,V> map) {

0 commit comments

Comments
 (0)