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

📄 sessionimpl.java

📁 一个Java持久层类库
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
	public Iterator iterate(String query, QueryParameters queryParameters) throws HibernateException {		errorIfClosed();		checkTransactionSynchStatus();		queryParameters.validateParameters();		HQLQueryPlan plan = getHQLQueryPlan( query, true );		autoFlushIfRequired( plan.getQuerySpaces() );		dontFlushFromFind++; //stops flush being called multiple times if this method is recursively called		try {			return plan.performIterate( queryParameters, this );		}		finally {			dontFlushFromFind--;		}	}	public ScrollableResults scroll(String query, QueryParameters queryParameters) throws HibernateException {		errorIfClosed();		checkTransactionSynchStatus();		HQLQueryPlan plan = getHQLQueryPlan( query, false );		autoFlushIfRequired( plan.getQuerySpaces() );		dontFlushFromFind++;		try {			return plan.performScroll( queryParameters, this );		}		finally {			dontFlushFromFind--;		}	}	public int delete(String query) throws HibernateException {		return delete( query, ArrayHelper.EMPTY_OBJECT_ARRAY, ArrayHelper.EMPTY_TYPE_ARRAY );	}	public int delete(String query, Object value, Type type) throws HibernateException {		return delete( query, new Object[]{value}, new Type[]{type} );	}	public int delete(String query, Object[] values, Type[] types) throws HibernateException {		errorIfClosed();		checkTransactionSynchStatus();		if ( query == null ) {			throw new IllegalArgumentException("attempt to perform delete-by-query with null query");		}		if ( log.isTraceEnabled() ) {			log.trace( "delete: " + query );			if ( values.length != 0 ) {				log.trace( "parameters: " + StringHelper.toString( values ) );			}		}		List list = find( query, values, types );		int deletionCount = list.size();		for ( int i = 0; i < deletionCount; i++ ) {			delete( list.get( i ) );		}		return deletionCount;	}	public Query createFilter(Object collection, String queryString) {		errorIfClosed();		checkTransactionSynchStatus();		CollectionFilterImpl filter = new CollectionFilterImpl(				queryString,		        collection,		        this,		        getFilterQueryPlan( collection, queryString, null, false ).getParameterMetadata()		);		filter.setComment( queryString );		return filter;	}		public Query getNamedQuery(String queryName) throws MappingException {		errorIfClosed();		checkTransactionSynchStatus();		return super.getNamedQuery(queryName);	}	public Object instantiate(String entityName, Serializable id) throws HibernateException {		return instantiate( factory.getEntityPersister(entityName), id );	}	/**	 * give the interceptor an opportunity to override the default instantiation	 */	public Object instantiate(EntityPersister persister, Serializable id) throws HibernateException {		errorIfClosed();		checkTransactionSynchStatus();		Object result = interceptor.instantiate( persister.getEntityName(), entityMode, id );		if ( result == null ) {			result = persister.instantiate( id, entityMode );		}		return result;	}	public EntityMode getEntityMode() {		checkTransactionSynchStatus();		return entityMode;	}	public void setFlushMode(FlushMode flushMode) {		errorIfClosed();		checkTransactionSynchStatus();		if ( log.isTraceEnabled() ) {			log.trace("setting flush mode to: " + flushMode);		}		this.flushMode = flushMode;	}		public FlushMode getFlushMode() {		checkTransactionSynchStatus();		return flushMode;	}	public CacheMode getCacheMode() {		checkTransactionSynchStatus();		return cacheMode;	}		public void setCacheMode(CacheMode cacheMode) {		errorIfClosed();		checkTransactionSynchStatus();		if ( log.isTraceEnabled() ) {			log.trace("setting cache mode to: " + cacheMode);		}		this.cacheMode= cacheMode; 	}	public Transaction getTransaction() throws HibernateException {		errorIfClosed();		return jdbcContext.getTransaction();	}		public Transaction beginTransaction() throws HibernateException {		errorIfClosed();		if ( rootSession != null ) {			// todo : should seriously consider not allowing a txn to begin from a child session			//      can always route the request to the root session...			log.warn( "Transaction started on non-root session" );		}		Transaction result = getTransaction();		result.begin();		return result;	}		public void afterTransactionBegin(Transaction tx) {		errorIfClosed();		interceptor.afterTransactionBegin(tx);	}	public EntityPersister getEntityPersister(final String entityName, final Object object) {		errorIfClosed();		if (entityName==null) {			return factory.getEntityPersister( guessEntityName( object ) );		}		else {			// try block is a hack around fact that currently tuplizers are not			// given the opportunity to resolve a subclass entity name.  this			// allows the (we assume custom) interceptor the ability to			// influence this decision if we were not able to based on the			// given entityName			try {				return factory.getEntityPersister( entityName )						.getSubclassEntityPersister( object, getFactory(), entityMode );			}			catch( HibernateException e ) {				try {					return getEntityPersister( null, object );				}				catch( HibernateException e2 ) {					throw e;				}			}		}	}	// not for internal use:	public Serializable getIdentifier(Object object) throws HibernateException {		errorIfClosed();		checkTransactionSynchStatus();		if ( object instanceof HibernateProxy ) {			LazyInitializer li = ( (HibernateProxy) object ).getHibernateLazyInitializer();			if ( li.getSession() != this ) {				throw new TransientObjectException( "The proxy was not associated with this session" );			}			return li.getIdentifier();		}		else {			EntityEntry entry = persistenceContext.getEntry(object);			if ( entry == null ) {				throw new TransientObjectException( "The instance was not associated with this session" );			}			return entry.getId();		}	}	/**	 * Get the id value for an object that is actually associated with the session. This	 * is a bit stricter than getEntityIdentifierIfNotUnsaved().	 */	public Serializable getContextEntityIdentifier(Object object) {		errorIfClosed();		if ( object instanceof HibernateProxy ) {			return getProxyIdentifier(object);		}		else {			EntityEntry entry = persistenceContext.getEntry(object);			return entry != null ? entry.getId() : null;		}	}		private Serializable getProxyIdentifier(Object proxy) {		return ( (HibernateProxy) proxy ).getHibernateLazyInitializer().getIdentifier();	}	public Collection filter(Object collection, String filter) throws HibernateException {		return listFilter( collection, filter, new QueryParameters( new Type[1], new Object[1] ) );	}	public Collection filter(Object collection, String filter, Object value, Type type) throws HibernateException {		return listFilter( collection, filter, new QueryParameters( new Type[]{null, type}, new Object[]{null, value} ) );	}	public Collection filter(Object collection, String filter, Object[] values, Type[] types) 	throws HibernateException {		Object[] vals = new Object[values.length + 1];		Type[] typs = new Type[types.length + 1];		System.arraycopy( values, 0, vals, 1, values.length );		System.arraycopy( types, 0, typs, 1, types.length );		return listFilter( collection, filter, new QueryParameters( typs, vals ) );	}	private FilterQueryPlan getFilterQueryPlan(			Object collection,			String filter,			QueryParameters parameters,			boolean shallow) throws HibernateException {		if ( collection == null ) {			throw new NullPointerException( "null collection passed to filter" );		}		CollectionEntry entry = persistenceContext.getCollectionEntryOrNull( collection );		final CollectionPersister roleBeforeFlush = (entry == null) ? null : entry.getLoadedPersister();		FilterQueryPlan plan = null;		if ( roleBeforeFlush == null ) {			// if it was previously unreferenced, we need to flush in order to			// get its state into the database in order to execute query			flush();			entry = persistenceContext.getCollectionEntryOrNull( collection );			CollectionPersister roleAfterFlush = (entry == null) ? null : entry.getLoadedPersister();			if ( roleAfterFlush == null ) {				throw new QueryException( "The collection was unreferenced" );			}			plan = factory.getQueryPlanCache().getFilterQueryPlan( filter, roleAfterFlush.getRole(), shallow, getEnabledFilters() );		}		else {			// otherwise, we only need to flush if there are in-memory changes			// to the queried tables			plan = factory.getQueryPlanCache().getFilterQueryPlan( filter, roleBeforeFlush.getRole(), shallow, getEnabledFilters() );			if ( autoFlushIfRequired( plan.getQuerySpaces() ) ) {				// might need to run a different filter entirely after the flush				// because the collection role may have changed				entry = persistenceContext.getCollectionEntryOrNull( collection );				CollectionPersister roleAfterFlush = (entry == null) ? null : entry.getLoadedPersister();				if ( roleBeforeFlush != roleAfterFlush ) {					if ( roleAfterFlush == null ) {						throw new QueryException( "The collection was dereferenced" );					}					plan = factory.getQueryPlanCache().getFilterQueryPlan( filter, roleAfterFlush.getRole(), shallow, getEnabledFilters() );				}			}		}		if ( parameters != null ) {			parameters.getPositionalParameterValues()[0] = entry.getLoadedKey();			parameters.getPositionalParameterTypes()[0] = entry.getLoadedPersister().getKeyType();		}		return plan;	}	public List listFilter(Object collection, String filter, QueryParameters queryParameters) 	throws HibernateException {		errorIfClosed();		checkTransactionSynchStatus();		FilterQueryPlan plan = getFilterQueryPlan( collection, filter, queryParameters, false );		List results = CollectionHelper.EMPTY_LIST;		boolean success = false;		dontFlushFromFind++;   //stops flush being called multiple times if this method is recursively called		try {			results = plan.performList( queryParameters, this );			success = true;		}		finally {			dontFlushFromFind--;			afterOperation(success);		}		return results;	}	public Iterator iterateFilter(Object collection, String filter, QueryParameters queryParameters) 	throws HibernateException {		errorIfClosed();		checkTransactionSynchStatus();		FilterQueryPlan plan = getFilterQueryPlan( collection, filter, queryParameters, true );		return plan.performIterate( queryParameters, this );	}	public Criteria createCriteria(Class persistentClass, String alias) {		errorIfClosed();		checkTransactionSynchStatus();		return new CriteriaImpl( persistentClass.getName(), alias, this );	}	public Criteria createCriteria(String entityName, String alias) {		errorIfClosed();		checkTransactionSynchStatus();		return new CriteriaImpl(entityName, alias, this);	}	public Criteria createCriteria(Class persistentClass) {		errorIfClosed();		checkTransactionSynchStatus();		return new CriteriaImpl( persistentClass.getName(), this );	}	public Criteria createCriteria(String entityName) {		errorIfClosed();		checkTransactionSynchStatus();		return new CriteriaImpl(entityName, this);	}	public ScrollableResults scroll(CriteriaImpl criteria, ScrollMode scrollMode) {		errorIfClosed();		checkTransactionSynchStatus();		String entityName = criteria.getEntityOrClassName();		CriteriaLoader loader = new CriteriaLoader(				getOuterJoinLoadable(entityName),				factory,				criteria,				entityName,				getEnabledFilters()		);		autoFlushIfRequired( loader.getQuerySpaces() );		dontFlushFromFind++;		try {			return loader.scroll(this, scrollMode);		}		finally {			dontFlushFromFind--;		}	}	public List list(CriteriaImpl criteria) throws HibernateException {		errorIfClosed();		checkTransactionSynchStatus();		String[] implementors = factory.getImplementors( criteria.getEntityOrClassName() );		int size = implementors.length;		CriteriaLoader[] loaders = new CriteriaLoader[size];		Set spaces = new HashSet();		for( int i=0; i <size; i++ ) {			loaders[i] = new CriteriaLoader(					getOuterJoinLoadable( implementors[i] ),					factory,					criteria,					implementors[i],					getEnabledFilters()				);			spaces.addAll( loaders[i].getQuerySpaces() );		}		autoFlushIfRequired(spaces);		List results = Collections.EMPTY_LIST;		dontFlushFromFind++;		boolean success = false;		try {			for( int i=0; i<size; i++ ) {				final List currentResults = loaders[i].list(this);				currentResults.addAll(results);				results = currentResults;			}			success = true;		}		finally {			dontFlushFromFind--;

⌨️ 快捷键说明

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