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

📄 statelesssessionimpl.java

📁 一个Java持久层类库
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
//$Id: StatelessSessionImpl.java 11398 2007-04-10 14:54:07Z steve.ebersole@jboss.com $package org.hibernate.impl;import java.io.Serializable;import java.sql.Connection;import java.util.Collections;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.hibernate.CacheMode;import org.hibernate.ConnectionReleaseMode;import org.hibernate.Criteria;import org.hibernate.EmptyInterceptor;import org.hibernate.EntityMode;import org.hibernate.FlushMode;import org.hibernate.HibernateException;import org.hibernate.Interceptor;import org.hibernate.LockMode;import org.hibernate.MappingException;import org.hibernate.ScrollMode;import org.hibernate.ScrollableResults;import org.hibernate.SessionException;import org.hibernate.StatelessSession;import org.hibernate.Transaction;import org.hibernate.UnresolvableObjectException;import org.hibernate.cache.CacheKey;import org.hibernate.collection.PersistentCollection;import org.hibernate.engine.EntityKey;import org.hibernate.engine.PersistenceContext;import org.hibernate.engine.QueryParameters;import org.hibernate.engine.StatefulPersistenceContext;import org.hibernate.engine.Versioning;import org.hibernate.engine.query.HQLQueryPlan;import org.hibernate.engine.query.NativeSQLQueryPlan;import org.hibernate.engine.query.sql.NativeSQLQuerySpecification;import org.hibernate.event.EventListeners;import org.hibernate.id.IdentifierGeneratorFactory;import org.hibernate.jdbc.Batcher;import org.hibernate.jdbc.JDBCContext;import org.hibernate.loader.criteria.CriteriaLoader;import org.hibernate.loader.custom.CustomLoader;import org.hibernate.loader.custom.CustomQuery;import org.hibernate.persister.entity.EntityPersister;import org.hibernate.persister.entity.OuterJoinLoadable;import org.hibernate.pretty.MessageHelper;import org.hibernate.proxy.HibernateProxy;import org.hibernate.type.Type;import org.hibernate.util.CollectionHelper;/** * @author Gavin King */public class StatelessSessionImpl extends AbstractSessionImpl		implements JDBCContext.Context, StatelessSession {	private static final Logger log = LoggerFactory.getLogger( StatelessSessionImpl.class );	private JDBCContext jdbcContext;	private PersistenceContext temporaryPersistenceContext = new StatefulPersistenceContext( this );	StatelessSessionImpl(Connection connection, SessionFactoryImpl factory) {		super( factory );		this.jdbcContext = new JDBCContext( this, connection, EmptyInterceptor.INSTANCE );	}	// inserts ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	public Serializable insert(Object entity) {		errorIfClosed();		return insert(null, entity);	}	public Serializable insert(String entityName, Object entity) {		errorIfClosed();		EntityPersister persister = getEntityPersister(entityName, entity);		Serializable id = persister.getIdentifierGenerator().generate(this, entity);		Object[] state = persister.getPropertyValues(entity, EntityMode.POJO);		if ( persister.isVersioned() ) {			boolean substitute = Versioning.seedVersion(state, persister.getVersionProperty(), persister.getVersionType(), this);			if ( substitute ) {				persister.setPropertyValues( entity, state, EntityMode.POJO );			}		}		if ( id == IdentifierGeneratorFactory.POST_INSERT_INDICATOR ) {			id = persister.insert(state, entity, this);		}		else {			persister.insert(id, state, entity, this);		}		persister.setIdentifier(entity, id, EntityMode.POJO);		return id;	}	// deletes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	public void delete(Object entity) {		errorIfClosed();		delete(null, entity);	}	public void delete(String entityName, Object entity) {		errorIfClosed();		EntityPersister persister = getEntityPersister(entityName, entity);		Serializable id = persister.getIdentifier(entity, EntityMode.POJO);		Object version = persister.getVersion(entity, EntityMode.POJO);		persister.delete(id, version, entity, this);	}	// updates ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	public void update(Object entity) {		errorIfClosed();		update(null, entity);	}	public void update(String entityName, Object entity) {		errorIfClosed();		EntityPersister persister = getEntityPersister(entityName, entity);		Serializable id = persister.getIdentifier(entity, EntityMode.POJO);		Object[] state = persister.getPropertyValues(entity, EntityMode.POJO);		Object oldVersion;		if ( persister.isVersioned() ) {			oldVersion = persister.getVersion(entity, EntityMode.POJO);			Object newVersion = Versioning.increment( oldVersion, persister.getVersionType(), this );			Versioning.setVersion(state, newVersion, persister);			persister.setPropertyValues(entity, state, EntityMode.POJO);		}		else {			oldVersion = null;		}		persister.update(id, state, null, false, null, oldVersion, entity, null, this);	}	// loading ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	public Object get(Class entityClass, Serializable id) {		return get( entityClass.getName(), id );	}	public Object get(Class entityClass, Serializable id, LockMode lockMode) {		return get( entityClass.getName(), id, lockMode );	}	public Object get(String entityName, Serializable id) {		return get(entityName, id, LockMode.NONE);	}	public Object get(String entityName, Serializable id, LockMode lockMode) {		errorIfClosed();		Object result = getFactory().getEntityPersister(entityName)				.load(id, null, lockMode, this);		temporaryPersistenceContext.clear();		return result;	}	public void refresh(Object entity) {		refresh( bestGuessEntityName( entity ), entity, LockMode.NONE );	}	public void refresh(String entityName, Object entity) {		refresh( entityName, entity, LockMode.NONE );	}	public void refresh(Object entity, LockMode lockMode) {		refresh( bestGuessEntityName( entity ), entity, lockMode );	}	public void refresh(String entityName, Object entity, LockMode lockMode) {		final EntityPersister persister = this.getEntityPersister( entityName, entity );		final Serializable id = persister.getIdentifier( entity, getEntityMode() );		if ( log.isTraceEnabled() ) {			log.trace(					"refreshing transient " +					MessageHelper.infoString( persister, id, this.getFactory() )			);		}		// TODO : can this ever happen???//		EntityKey key = new EntityKey( id, persister, source.getEntityMode() );//		if ( source.getPersistenceContext().getEntry( key ) != null ) {//			throw new PersistentObjectException(//					"attempted to refresh transient instance when persistent " +//					"instance was already associated with the Session: " +//					MessageHelper.infoString( persister, id, source.getFactory() )//			);//		}		if ( persister.hasCache() ) {			final CacheKey ck = new CacheKey(					id,			        persister.getIdentifierType(),			        persister.getRootEntityName(),			        this.getEntityMode(),			        this.getFactory()			);			persister.getCacheAccessStrategy().evict( ck );		}		String previousFetchProfile = this.getFetchProfile();		Object result = null;		try {			this.setFetchProfile( "refresh" );			result = persister.load( id, entity, lockMode, this );		}		finally {			this.setFetchProfile( previousFetchProfile );		}		UnresolvableObjectException.throwIfNull( result, id, persister.getEntityName() );	}	public Object immediateLoad(String entityName, Serializable id)			throws HibernateException {		throw new SessionException("proxies cannot be fetched by a stateless session");	}	public void initializeCollection(			PersistentCollection collection,	        boolean writing) throws HibernateException {		throw new SessionException("collections cannot be fetched by a stateless session");	}	public Object instantiate(			String entityName,	        Serializable id) throws HibernateException {		errorIfClosed();		return getFactory().getEntityPersister( entityName )				.instantiate( id, EntityMode.POJO );	}	public Object internalLoad(			String entityName,	        Serializable id,	        boolean eager,	        boolean nullable) throws HibernateException {		errorIfClosed();		EntityPersister persister = getFactory().getEntityPersister(entityName);		if ( !eager && persister.hasProxy() ) {			return persister.createProxy(id, this);		}		Object loaded = temporaryPersistenceContext.getEntity( new EntityKey(id, persister, EntityMode.POJO) );		//TODO: if not loaded, throw an exception		return loaded==null ? get( entityName, id ) : loaded;	}	public Iterator iterate(String query, QueryParameters queryParameters) throws HibernateException {		throw new UnsupportedOperationException();	}	public Iterator iterateFilter(Object collection, String filter, QueryParameters queryParameters)	throws HibernateException {		throw new UnsupportedOperationException();	}	public List listFilter(Object collection, String filter, QueryParameters queryParameters)	throws HibernateException {		throw new UnsupportedOperationException();	}	public boolean isOpen() {		return !isClosed();	}	public void close() {		managedClose();	}	public ConnectionReleaseMode getConnectionReleaseMode() {		return factory.getSettings().getConnectionReleaseMode();	}	public boolean isAutoCloseSessionEnabled() {		return factory.getSettings().isAutoCloseSessionEnabled();	}	public boolean isFlushBeforeCompletionEnabled() {		return true;	}	public boolean isFlushModeNever() {		return false;	}	public void managedClose() {		if ( isClosed() ) {			throw new SessionException( "Session was already closed!" );		}		jdbcContext.getConnectionManager().close();		setClosed();	}	public void managedFlush() {		errorIfClosed();		getBatcher().executeBatch();	}	public boolean shouldAutoClose() {		return isAutoCloseSessionEnabled() && !isClosed();	}	public void afterTransactionCompletion(boolean successful, Transaction tx) {}	public void beforeTransactionCompletion(Transaction tx) {}	public String bestGuessEntityName(Object object) {		if (object instanceof HibernateProxy) {			object = ( (HibernateProxy) object ).getHibernateLazyInitializer().getImplementation();		}		return guessEntityName(object);

⌨️ 快捷键说明

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