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