⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bulkoperationcleanupaction.java

📁 一个Java持久层类库
💻 JAVA
字号:
// $Id: BulkOperationCleanupAction.java 9897 2006-05-05 20:50:27Z max.andersen@jboss.com $package org.hibernate.action;import org.hibernate.HibernateException;import org.hibernate.metadata.ClassMetadata;import org.hibernate.persister.entity.EntityPersister;import org.hibernate.persister.entity.Queryable;import org.hibernate.engine.SessionFactoryImplementor;import org.hibernate.engine.SessionImplementor;import java.io.Serializable;import java.util.List;import java.util.Map;import java.util.Set;import java.util.Iterator;import java.util.HashSet;import java.util.ArrayList;/** * Implementation of BulkOperationCleanupAction. * * @author Steve Ebersole */public class BulkOperationCleanupAction implements Executable, Serializable {	private final SessionImplementor session;	private final Set affectedEntityNames = new HashSet();	private final Set affectedCollectionRoles = new HashSet();	private final Serializable[] spaces;	public BulkOperationCleanupAction(SessionImplementor session, Queryable[] affectedQueryables) {		this.session = session;		// TODO : probably better to calculate these and pass them in, as it'll be more performant		ArrayList tmpSpaces = new ArrayList();		for ( int i = 0; i < affectedQueryables.length; i++ ) {			if ( affectedQueryables[i].hasCache() ) {				affectedEntityNames.add( affectedQueryables[i].getEntityName() );			}			Set roles = session.getFactory().getCollectionRolesByEntityParticipant( affectedQueryables[i].getEntityName() );			if ( roles != null ) {				affectedCollectionRoles.addAll( roles );			}			for ( int y = 0; y < affectedQueryables[i].getQuerySpaces().length; y++ ) {				tmpSpaces.add( affectedQueryables[i].getQuerySpaces()[y] );			}		}		this.spaces = new Serializable[ tmpSpaces.size() ];		for ( int i = 0; i < tmpSpaces.size(); i++ ) {			this.spaces[i] = ( Serializable ) tmpSpaces.get( i );		}	}		/** Create an action that will evict collection and entity regions based on queryspaces (table names).	 *  TODO: cache the autodetected information and pass it in instead.	 **/	public BulkOperationCleanupAction(SessionImplementor session, Set querySpaces) {		this.session = session;		Set tmpSpaces = new HashSet(querySpaces);		SessionFactoryImplementor factory = session.getFactory();		Iterator iterator = factory.getAllClassMetadata().entrySet().iterator();		while ( iterator.hasNext() ) {			Map.Entry entry = (Map.Entry) iterator.next();			String entityName = (String) entry.getKey();			EntityPersister persister = factory.getEntityPersister( entityName );			Serializable[] entitySpaces = persister.getQuerySpaces();			if (affectedEntity( querySpaces, entitySpaces )) {				if ( persister.hasCache() ) {					affectedEntityNames.add( persister.getEntityName() );				}				Set roles = session.getFactory().getCollectionRolesByEntityParticipant( persister.getEntityName() );				if ( roles != null ) {					affectedCollectionRoles.addAll( roles );				}				for ( int y = 0; y < entitySpaces.length; y++ ) {					tmpSpaces.add( entitySpaces[y] );				}			}		}		this.spaces = (Serializable[]) tmpSpaces.toArray( new Serializable[tmpSpaces.size()] );			}	/** returns true if no queryspaces or if there are a match */	private boolean affectedEntity(Set querySpaces, Serializable[] entitySpaces) {		if(querySpaces==null || querySpaces.isEmpty()) {			return true;		}				for ( int i = 0; i < entitySpaces.length; i++ ) {			if ( querySpaces.contains( entitySpaces[i] ) ) {				return true;			}		}		return false;	}	public void init() {		evictEntityRegions();		evictCollectionRegions();	}	public boolean hasAfterTransactionCompletion() {		return true;	}	public void afterTransactionCompletion(boolean success) throws HibernateException {		evictEntityRegions();		evictCollectionRegions();	}	public Serializable[] getPropertySpaces() {		return spaces;	}	public void beforeExecutions() throws HibernateException {		// nothing to do	}	public void execute() throws HibernateException {		// nothing to do			}	private void evictEntityRegions() {		if ( affectedEntityNames != null ) {			Iterator itr = affectedEntityNames.iterator();			while ( itr.hasNext() ) {				final String entityName = ( String ) itr.next();				session.getFactory().evictEntity( entityName );			}		}	}	private void evictCollectionRegions() {		if ( affectedCollectionRoles != null ) {			Iterator itr = affectedCollectionRoles.iterator();			while ( itr.hasNext() ) {				final String roleName = ( String ) itr.next();				session.getFactory().evictCollection( roleName );			}		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -