log.trace("flushing session");
EventSource session = event.getSession();
final PersistenceContext persistenceContext = session.getPersistenceContext();
session.getInterceptor().preFlush( new LazyIterator( persistenceContext.getEntitiesByKey() ) );
prepareEntityFlushes(session);
// we could move this inside if we wanted to
// tolerate collection initializations during
// collection dirty checking:
prepareCollectionFlushes(session);
// now, any collections that are initialized
// inside this block do not get updated - they
// are ignored until the next flush
persistenceContext.setFlushing(true);
try {
flushEntities(event);
flushCollections(session);
}
finally {
persistenceContext.setFlushing(false);
}
//some statistics
if ( log.isDebugEnabled() ) {
log.debug( "Flushed: " +
session.getActionQueue().numberOfInsertions() + " insertions, " +
session.getActionQueue().numberOfUpdates() + " updates, " +
session.getActionQueue().numberOfDeletions() + " deletions to " +
persistenceContext.getEntityEntries().size() + " objects"
);
log.debug( "Flushed: " +
session.getActionQueue().numberOfCollectionCreations() + " (re)creations, " +
session.getActionQueue().numberOfCollectionUpdates() + " updates, " +
session.getActionQueue().numberOfCollectionRemovals() + " removals to " +
persistenceContext.getCollectionEntries().size() + " collections"
);
new Printer( session.getFactory() ).toString(
persistenceContext.getEntitiesByKey().values().iterator(),
session.getEntityMode()
);
}
}