In a transaction where many entities are inserted, the performance when getting an entity is degrading at: StatefulPersistenceCotnext.java: {code:java} @Override public boolean wasInsertedDuringTransaction(EntityPersister persister, Serializable id) { // again, we only really care if the entity is cached if ( persister.canWriteToCache() ) { if ( insertedKeysMap != null ) { final List<Serializable> insertedEntityIds = insertedKeysMap.get( persister.getRootEntityName() ); if ( insertedEntityIds != null ) { return insertedEntityIds.contains( id ); } } } return false; } {code}
*insertedEntityIds* list may contain more than 10 100 .000 entries that affect performance of *ArrayList.contains* which has *O( n )* complexity.
Please replace *ArrayList* with *HashSet* for better _contains_ performance. |
|