📄 statelesssessionimpl.java
字号:
//$Id: StatelessSessionImpl.java 9240 2006-02-08 22:47:34Z steveebersole $
package org.hibernate.impl;
import java.io.Serializable;
import java.sql.Connection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
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.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.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.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 JDBCContext jdbcContext;
StatelessSessionImpl(
Connection connection,
SessionFactoryImpl factory
) {
super(factory);
this.jdbcContext = new JDBCContext( this, connection, EmptyInterceptor.INSTANCE );
}
public boolean isOpen() {
return !isClosed();
}
public void close() {
managedClose();
}
public void delete(Object entity) {
errorIfClosed();
delete(null, entity);
}
public Serializable insert(Object entity) {
errorIfClosed();
return insert(null, entity);
}
public void update(Object entity) {
errorIfClosed();
update(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;
}
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);
}
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);
}
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);
}
public Connection connection() {
errorIfClosed();
return jdbcContext.borrowConnection();
}
public int executeUpdate(String query, QueryParameters queryParameters)
throws HibernateException {
errorIfClosed();
queryParameters.validateParameters();
HQLQueryPlan plan = getHQLQueryPlan( query, false );
boolean success = false;
int result = 0;
try {
result = plan.performExecuteUpdate( queryParameters, this );
success = true;
}
finally {
afterOperation(success);
}
temporaryPersistenceContext.clear();
return result;
}
public Batcher getBatcher() {
errorIfClosed();
return jdbcContext.getConnectionManager()
.getBatcher();
}
public CacheMode getCacheMode() {
return CacheMode.IGNORE;
}
public int getDontFlushFromFind() {
return 0;
}
public Map getEnabledFilters() {
return CollectionHelper.EMPTY_MAP;
}
public Serializable getContextEntityIdentifier(Object object) {
errorIfClosed();
return null;
}
public EntityMode getEntityMode() {
return EntityMode.POJO;
}
public EntityPersister getEntityPersister(String entityName, Object object)
throws HibernateException {
errorIfClosed();
if (entityName==null) {
return factory.getEntityPersister( guessEntityName(object) );
}
else {
return factory.getEntityPersister( entityName )
.getSubclassEntityPersister( object, getFactory(), EntityMode.POJO );
}
}
public Object getEntityUsingInterceptor(EntityKey key) throws HibernateException {
errorIfClosed();
return null;
}
public Type getFilterParameterType(String filterParameterName) {
throw new UnsupportedOperationException();
}
public Object getFilterParameterValue(String filterParameterName) {
throw new UnsupportedOperationException();
}
public FlushMode getFlushMode() {
return FlushMode.COMMIT;
}
public Interceptor getInterceptor() {
return EmptyInterceptor.INSTANCE;
}
public EventListeners getListeners() {
throw new UnsupportedOperationException();
}
public PersistenceContext getPersistenceContext() {
return temporaryPersistenceContext;
}
public long getTimestamp() {
throw new UnsupportedOperationException();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -