FileDocCategorySizeDatePackage
DefaultAutoFlushEventListener.javaAPI DocHibernate 3.2.52311Mon Aug 08 18:24:44 BST 2005org.hibernate.event.def

DefaultAutoFlushEventListener

public class DefaultAutoFlushEventListener extends AbstractFlushingEventListener implements org.hibernate.event.AutoFlushEventListener
Defines the default flush event listeners used by hibernate for flushing session state in response to generated auto-flush events.
author
Steve Ebersole

Fields Summary
private static final Log
log
Constructors Summary
Methods Summary
private booleanflushIsReallyNeeded(org.hibernate.event.AutoFlushEvent event, org.hibernate.event.EventSource source)

		return source.getActionQueue()
				.areTablesToBeUpdated( event.getQuerySpaces() ) || 
						source.getFlushMode()==FlushMode.ALWAYS;
	
private booleanflushMightBeNeeded(org.hibernate.event.EventSource source)

		return !source.getFlushMode().lessThan(FlushMode.AUTO) && 
				source.getDontFlushFromFind() == 0 &&
				source.getPersistenceContext().hasNonReadOnlyEntities();
	
public voidonAutoFlush(org.hibernate.event.AutoFlushEvent event)
Handle the given auto-flush event.

param
event The auto-flush event to be handled.
throws
HibernateException


                        
	      

		final EventSource source = event.getSession();
		
		if ( flushMightBeNeeded(source) ) {

			final int oldSize = source.getActionQueue().numberOfCollectionRemovals();

			flushEverythingToExecutions(event);
			
			if ( flushIsReallyNeeded(event, source) ) {

				log.trace("Need to execute flush");

				performExecutions(source);
				postFlush(source);
				// note: performExecutions() clears all collectionXxxxtion 
				// collections (the collection actions) in the session

				if ( source.getFactory().getStatistics().isStatisticsEnabled() ) {
					source.getFactory().getStatisticsImplementor().flush();
				}
				
			}
			else {

				log.trace("Dont need to execute flush");
				source.getActionQueue().clearFromFlushNeededCheck( oldSize );
			}
			
			event.setFlushRequired( flushIsReallyNeeded( event, source ) );

		}