hibernate session接口

hibernate session接口

Session接口是hibernate向应用程序提供的操纵数据库的最主要的接口,提供了保存、更新、删除和加载Java对象的方法。

session具有一个缓存,位于缓存中的对象成为持久化对象,和数据库中的相关记录对应。session能够在某些时间点,按照缓存中对象的变化来执行相关的SQL语句,来同步更新数据库,这一过程称为刷新缓存(flush)。

hibernate把对象分为4种状态,持久化状态,临时状态,游离状态,删除状态。session的特定方法可以使对象进行状态转换

session缓存

session实例没有结束生命周期,且没有清理缓存,则存放在session缓存中的对象也不会结束生命周期,session缓存可以减少访问数据库的频率。

操作session缓存
flush方法

缓存中对象同步到数据库(会插入或更新数据库),使数据库中的状态与缓存中一致

注意:

session在以下情况下会刷新缓存

  • hibernate在事务提交之前会执行flush()方法,然后再向数据库提交事务

  • 显示调用session.flush()方法

  • 在执行HQL或者QBC查询,会先进行flush()操作,以得到数据表最新的记录

refresh方法

将数据库同步到缓存中(会查询数据库),使缓存中的状态与数据库一致

session.refresh(); 
clear方法

清理缓存,可以将session中的缓存清除

session.clear();

四种状态的转换

临时状态(Transient)

  • 在使用代理主键的情况下,OID通常为null
  • 不处于session缓存中
  • 在数据库中也没有对应的记录,此时刚new了一个实体对象,还存在于保存临时数据的内存区域中

持久化状态(Persist)

  • OID不为null
  • 位于session缓存中
  • 若在数据库中已经有和其对应的记录,持久化对象和数据库中的相关记录对应
  • session在flush缓存时,会根据持久化对象的属性变化,来同步数据库
  • 在同一个session实例的缓存中,数据库表中每条记录只对应唯一的持久化对象
  • 持久化对象的id不可以被修改,因为hibernate是根据id去进行比较的

删除状态(Removed)

  • 在数据库中没有和其OID对应的记录
  • 不再处于session缓存中

游离状态(Detached)

  • OID不为null
  • 不再处于session缓存中
  • 一般情况下,游离对象是由持久化对象转变过来的(session进行close、clear、evict等情况),数据库中可能还存在它对应的记录,但是因为会话已经消失,对象不在持久化管理之内,所以处于游离状态
hibernate四种状态转换
hibernate四种状态转换
save方法和persist方法的区别

在调用persist()方法时如果存在id,则会抛出异常,而save方法则可以正常执行

org.hibernate.PersistentObjectException: detached entity passed to persist
get方法和load方法的区别
  • 执行get方法会立即加载对象,执行load方法若不使用该对象,则不会立即查询,而是返回一个代理对象(延时加载)

  • 若数据表中没有对应的记录,get方法返回null,load方法抛出异常

    org.hibernate.ObjectNotFoundException: No row with the given identifier exists
  • load方法可能会抛出懒加载异常

    org.hibernate.LazyInitializationException: could not initialize proxy - no Session

注意:在session缓存中不能够有两个相同OID的对象,否则会报异常

public static void testOid(Session session){
  User user = (User) session.get(User.class,1);
  System.out.println(user);
  User user1  = new User();
  user1.setId(1);
  user1.setName("王五");
  session.saveOrUpdate(user1);
}

org.hibernate.NonUniqueObjectException: A different object with the same identifier value was already associated with the session
evict方法

从session缓存中将指定的持久化对象移除

hibernate获取原生JDBC连接进行操作

可以使用doWork或者doReturnWork来使用原生JDBC操作数据

session.doWork(new Work() {
  @Override
  public void execute(Connection connection) throws SQLException {

  }
});

session.doReturningWork(new ReturningWork<Object>() {
  @Override
  public Object execute(Connection connection) throws SQLException {
    return null;
  }
});

session方法说明

public interface Session extends SharedSessionContract {
   /**
    * Obtain a {@link Session} builder with the ability to grab certain information from this session.
    *
    * @return The session builder
    */

   public SharedSessionBuilder sessionWithOptions();

   /**
    * Force this session to flush. Must be called at the end of a
    * unit of work, before committing the transaction and closing the
    * session (depending on {@link #setFlushMode(FlushMode)},
    * {@link Transaction#commit()} calls this method).
    * <p/>
    * <i>Flushing</i> is the process of synchronizing the underlying persistent
    * store with persistable state held in memory.
    *
    * @throws HibernateException Indicates problems flushing the session or
    * talking to the database.
    */

   public void flush() throws HibernateException;

   /**
    * Set the flush mode for this session.
    * <p/>
    * The flush mode determines the points at which the session is flushed.
    * <i>Flushing</i> is the process of synchronizing the underlying persistent
    * store with persistable state held in memory.
    * <p/>
    * For a logically "read only" session, it is reasonable to set the session's
    * flush mode to {@link FlushMode#MANUAL} at the start of the session (in
    * order to achieve some extra performance).
    *
    * @param flushMode the new flush mode
    * @see FlushMode
    */

   public void setFlushMode(FlushMode flushMode);

   /**
    * Get the current flush mode for this session.
    *
    * @return The flush mode
    */

   public FlushMode getFlushMode();

   /**
    * Set the cache mode.
    * <p/>
    * Cache mode determines the manner in which this session can interact with
    * the second level cache.
    *
    * @param cacheMode The new cache mode.
    */

   public void setCacheMode(CacheMode cacheMode);

   /**
    * Get the current cache mode.
    *
    * @return The current cache mode.
    */

   public CacheMode getCacheMode();

   // 获取创建该会话的sessionFactory
   public SessionFactory getSessionFactory();

   // 关闭数据库连接
   public Connection close() throws HibernateException;

   // 取消当前查询的执行
   public void cancelQuery() throws HibernateException;

   // 当前session是否开启
   public boolean isOpen();

   // 当前session是否连接
   public boolean isConnected();

   // 该session中是否包含必须与数据库痛的变化
   public boolean isDirty() throws HibernateException;

   /**
    * Will entities and proxies that are loaded into this session be made 
    * read-only by default?
    *
    * To determine the read-only/modifiable setting for a particular entity 
    * or proxy:
    * @see Session#isReadOnly(Object)
    *
    * @return true, loaded entities/proxies will be made read-only by default; 
    *         false, loaded entities/proxies will be made modifiable by default. 
    */

   public boolean isDefaultReadOnly();

   /**
    * Change the default for entities and proxies loaded into this session
    * from modifiable to read-only mode, or from modifiable to read-only mode.
    *
    * Read-only entities are not dirty-checked and snapshots of persistent
    * state are not maintained. Read-only entities can be modified, but
    * changes are not persisted.
    *
    * When a proxy is initialized, the loaded entity will have the same
    * read-only/modifiable setting as the uninitialized
    * proxy has, regardless of the session's current setting.
    *
    * To change the read-only/modifiable setting for a particular entity
    * or proxy that is already in this session:
    * @see Session#setReadOnly(Object,boolean)
    *
    * To override this session's read-only/modifiable setting for entities
    * and proxies loaded by a Query:
    * @see Query#setReadOnly(boolean)
    *
    * @param readOnly true, the default for loaded entities/proxies is read-only;
    *                 false, the default for loaded entities/proxies is modifiable
    */

   public void setDefaultReadOnly(boolean readOnly);

   // 返回与当前实体关联的会话标识符
   public Serializable getIdentifier(Object object);

   /**
    * Check if this instance is associated with this <tt>Session</tt>.
    *
    * @param object an instance of a persistent class
    * @return true if the given instance is associated with this <tt>Session</tt>
    */

   public boolean contains(Object object);

   /**
    * Remove this instance from the session cache. Changes to the instance will
    * not be synchronized with the database. This operation cascades to associated
    * instances if the association is mapped with <tt>cascade="evict"</tt>.
    *
    * @param object The entity to evict
    *
    * @throws NullPointerException if the passed object is {@code null}
    * @throws IllegalArgumentException if the passed object is not defined as an entity
    */

   public void evict(Object object);

   /**
    * Return the persistent instance of the given entity class with the given identifier,
    * obtaining the specified lock mode, assuming the instance exists.
    *
    * @param theClass a persistent class
    * @param id a valid identifier of an existing persistent instance of the class
    * @param lockMode the lock level
    *
    * @return the persistent instance or proxy
    *
    * @deprecated LockMode parameter should be replaced with LockOptions
    */

   @Deprecated
   public Object load(Class theClass, Serializable id, LockMode lockMode);

   /**
    * Return the persistent instance of the given entity class with the given identifier,
    * obtaining the specified lock mode, assuming the instance exists.
    *
    * @param theClass a persistent class
    * @param id a valid identifier of an existing persistent instance of the class
    * @param lockOptions contains the lock level
    * @return the persistent instance or proxy
    */

   public Object load(Class theClass, Serializable id, LockOptions lockOptions);

   /**
    * Return the persistent instance of the given entity class with the given identifier,
    * obtaining the specified lock mode, assuming the instance exists.
    *
    * @param entityName a persistent class
    * @param id a valid identifier of an existing persistent instance of the class
    * @param lockMode the lock level
    *
    * @return the persistent instance or proxy
    *
    * @deprecated LockMode parameter should be replaced with LockOptions
    */

   @Deprecated
   public Object load(String entityName, Serializable id, LockMode lockMode);

   /**
    * Return the persistent instance of the given entity class with the given identifier,
    * obtaining the specified lock mode, assuming the instance exists.
    *
    * @param entityName a persistent class
    * @param id a valid identifier of an existing persistent instance of the class
    * @param lockOptions contains the lock level
    *
    * @return the persistent instance or proxy
    */

   public Object load(String entityName, Serializable id, LockOptions lockOptions);

   /**
    * Return the persistent instance of the given entity class with the given identifier,
    * assuming that the instance exists. This method might return a proxied instance that
    * is initialized on-demand, when a non-identifier method is accessed.
    * <br><br>
    * You should not use this method to determine if an instance exists (use <tt>get()</tt>
    * instead). Use this only to retrieve an instance that you assume exists, where non-existence
    * would be an actual error.
    *
    * @param theClass a persistent class
    * @param id a valid identifier of an existing persistent instance of the class
    *
    * @return the persistent instance or proxy
    */

   public Object load(Class theClass, Serializable id);

   /**
    * Return the persistent instance of the given entity class with the given identifier,
    * assuming that the instance exists. This method might return a proxied instance that
    * is initialized on-demand, when a non-identifier method is accessed.
    * <br><br>
    * You should not use this method to determine if an instance exists (use <tt>get()</tt>
    * instead). Use this only to retrieve an instance that you assume exists, where non-existence
    * would be an actual error.
    *
    * @param entityName a persistent class
    * @param id a valid identifier of an existing persistent instance of the class
    *
    * @return the persistent instance or proxy
    */

   public Object load(String entityName, Serializable id);

   /**
    * Read the persistent state associated with the given identifier into the given transient
    * instance.
    *
    * @param object an "empty" instance of the persistent class
    * @param id a valid identifier of an existing persistent instance of the class
    */

   public void load(Object object, Serializable id);

   /**
    * Persist the state of the given detached instance, reusing the current
    * identifier value.  This operation cascades to associated instances if
    * the association is mapped with {@code cascade="replicate"}
    *
    * @param object a detached instance of a persistent class
    * @param replicationMode The replication mode to use
    */

   public void replicate(Object object, ReplicationMode replicationMode);

   /**
    * Persist the state of the given detached instance, reusing the current
    * identifier value.  This operation cascades to associated instances if
    * the association is mapped with {@code cascade="replicate"}
    *
    * @param entityName The entity name
    * @param object a detached instance of a persistent class
    * @param replicationMode The replication mode to use
    */

   public void replicate(String entityName, Object object, ReplicationMode replicationMode) ;

   // 保存对象,生成标识,变为持久化状态
   public Serializable save(Object object);

   // 保存对象,生成标识,变为持久化状态
   public Serializable save(String entityName, Object object);

   // 保存或更新对象
   public void saveOrUpdate(Object object);

   // 保存或更新对象
   public void saveOrUpdate(String entityName, Object object);

   // 更新该标识符所对应的对象
   public void update(Object object);

   
   // 更新该标识符所对应的对象
   public void update(String entityName, Object object);

   /**
    * Copy the state of the given object onto the persistent object with the same
    * identifier. If there is no persistent instance currently associated with
    * the session, it will be loaded. Return the persistent instance. If the
    * given instance is unsaved, save a copy of and return it as a newly persistent
    * instance. The given instance does not become associated with the session.
    * This operation cascades to associated instances if the association is mapped
    * with {@code cascade="merge"}
    * <p/>
    * The semantics of this method are defined by JSR-220.
    *
    * @param object a detached instance with state to be copied
    *
    * @return an updated persistent instance
    */

   public Object merge(Object object);

   /**
    * Copy the state of the given object onto the persistent object with the same
    * identifier. If there is no persistent instance currently associated with
    * the session, it will be loaded. Return the persistent instance. If the
    * given instance is unsaved, save a copy of and return it as a newly persistent
    * instance. The given instance does not become associated with the session.
    * This operation cascades to associated instances if the association is mapped
    * with {@code cascade="merge"}
    * <p/>
    * The semantics of this method are defined by JSR-220.
    *
    * @param entityName The entity name
    * @param object a detached instance with state to be copied
    *
    * @return an updated persistent instance
    */

   public Object merge(String entityName, Object object);

   /**
    * Make a transient instance persistent. This operation cascades to associated
    * instances if the association is mapped with {@code cascade="persist"}
    * <p/>
    * The semantics of this method are defined by JSR-220.
    *
    * @param object a transient instance to be made persistent
    */

   public void persist(Object object);
   /**
    * Make a transient instance persistent. This operation cascades to associated
    * instances if the association is mapped with {@code cascade="persist"}
    * <p/>
    * The semantics of this method are defined by JSR-220.
    *
    * @param entityName The entity name
    * @param object a transient instance to be made persistent
    */

   public void persist(String entityName, Object object);

   // 删除该持久化对象
   public void delete(Object object);

   // 删除该持久化对象
   public void delete(String entityName, Object object);

   /**
    * Obtain the specified lock level upon the given object. This may be used to
    * perform a version check (<tt>LockMode.READ</tt>), to upgrade to a pessimistic
    * lock (<tt>LockMode.PESSIMISTIC_WRITE</tt>), or to simply reassociate a transient instance
    * with a session (<tt>LockMode.NONE</tt>). This operation cascades to associated
    * instances if the association is mapped with <tt>cascade="lock"</tt>.
    *
    * @param object a persistent or transient instance
    * @param lockMode the lock level
    *
    * @deprecated instead call buildLockRequest(LockMode).lock(object)
    */

   @Deprecated
   public void lock(Object object, LockMode lockMode);

   /**
    * Obtain the specified lock level upon the given object. This may be used to
    * perform a version check (<tt>LockMode.OPTIMISTIC</tt>), to upgrade to a pessimistic
    * lock (<tt>LockMode.PESSIMISTIC_WRITE</tt>), or to simply reassociate a transient instance
    * with a session (<tt>LockMode.NONE</tt>). This operation cascades to associated
    * instances if the association is mapped with <tt>cascade="lock"</tt>.
    *
    * @param entityName The name of the entity
    * @param object a persistent or transient instance
    * @param lockMode the lock level
    *
    * @deprecated instead call buildLockRequest(LockMode).lock(entityName, object)
    */

   @SuppressWarnings( {"JavaDoc"})
   @Deprecated
   public void lock(String entityName, Object object, LockMode lockMode);

   /**
    * Build a LockRequest that specifies the LockMode, pessimistic lock timeout and lock scope.
    * timeout and scope is ignored for optimistic locking.  After building the LockRequest,
    * call LockRequest.lock to perform the requested locking. 
    * <p/>
    * Example usage:
    * {@code session.buildLockRequest().setLockMode(LockMode.PESSIMISTIC_WRITE).setTimeOut(60000).lock(entity);}
    *
    * @param lockOptions contains the lock level
    *
    * @return a lockRequest that can be used to lock the passed object.
    */

   public LockRequest buildLockRequest(LockOptions lockOptions);

   // 从数据库中重新读取该对象
   public void refresh(Object object);

   /**
    * Re-read the state of the given instance from the underlying database. It is
    * inadvisable to use this to implement long-running sessions that span many
    * business tasks. This method is, however, useful in certain special circumstances.
    * For example
    * <ul>
    * <li>where a database trigger alters the object state upon insert or update
    * <li>after executing direct SQL (eg. a mass update) in the same session
    * <li>after inserting a <tt>Blob</tt> or <tt>Clob</tt>
    * </ul>
    *
    * @param entityName a persistent class
    * @param object a persistent or detached instance
    */

   public void refresh(String entityName, Object object);

   /**
    * Re-read the state of the given instance from the underlying database, with
    * the given <tt>LockMode</tt>. It is inadvisable to use this to implement
    * long-running sessions that span many business tasks. This method is, however,
    * useful in certain special circumstances.
    *
    * @param object a persistent or detached instance
    * @param lockMode the lock mode to use
    *
    * @deprecated LockMode parameter should be replaced with LockOptions
    */

   @Deprecated
   public void refresh(Object object, LockMode lockMode);

   /**
    * Re-read the state of the given instance from the underlying database, with
    * the given <tt>LockMode</tt>. It is inadvisable to use this to implement
    * long-running sessions that span many business tasks. This method is, however,
    * useful in certain special circumstances.
    *
    * @param object a persistent or detached instance
    * @param lockOptions contains the lock mode to use
    */

   public void refresh(Object object, LockOptions lockOptions);

   /**
    * Re-read the state of the given instance from the underlying database, with
    * the given <tt>LockMode</tt>. It is inadvisable to use this to implement
    * long-running sessions that span many business tasks. This method is, however,
    * useful in certain special circumstances.
    *
    * @param entityName a persistent class
    * @param object a persistent or detached instance
    * @param lockOptions contains the lock mode to use
    */

   public void refresh(String entityName, Object object, LockOptions lockOptions);

   /**
    * Determine the current lock mode of the given object.
    *
    * @param object a persistent instance
    *
    * @return the current lock mode
    */

   public LockMode getCurrentLockMode(Object object);

   // 为给定集合和查询条件创建查询实例
   public Query createFilter(Object collection, String queryString);

   // 清除该会话
   public void clear();

   // 返回给定命名和标识符的持久化对象实例
   public Object get(Class clazz, Serializable id);

   

   /**
    * Return the persistent instance of the given entity class with the given identifier,
    * or null if there is no such persistent instance. (If the instance is already associated
    * with the session, return that instance. This method never returns an uninitialized instance.)
    * Obtain the specified lock mode if the instance exists.
    *
    * @param clazz a persistent class
    * @param id an identifier
    * @param lockOptions the lock mode
    *
    * @return a persistent instance or null
    */

   public Object get(Class clazz, Serializable id, LockOptions lockOptions);

   // 返回给定命名和标识符的持久化对象实例
   public Object get(String entityName, Serializable id);

   /**
    * Return the persistent instance of the given entity class with the given identifier,
    * or null if there is no such persistent instance. (If the instance is already associated
    * with the session, return that instance. This method never returns an uninitialized instance.)
    * Obtain the specified lock mode if the instance exists.
    *
    * @param entityName the entity name
    * @param id an identifier
    * @param lockOptions contains the lock mode
    *
    * @return a persistent instance or null
    */

   public Object get(String entityName, Serializable id, LockOptions lockOptions);

   /**
    * Return the entity name for a persistent entity.
    *   
    * @param object a persistent entity
    *
    * @return the entity name
    */

   public String getEntityName(Object object);
   
   /**
    * Create an {@link IdentifierLoadAccess} instance to retrieve the specified entity type by
    * primary key.
    * 
    * @param entityName The entity name of the entity type to be retrieved
    *
    * @return load delegate for loading the specified entity type by primary key
    *
    * @throws HibernateException If the specified entity name cannot be resolved as an entity name
    */

   public IdentifierLoadAccess byId(String entityName);

   /**
    * Create an {@link IdentifierLoadAccess} instance to retrieve the specified entity by
    * primary key.
    *
    * @param entityClass The entity type to be retrieved
    *
    * @return load delegate for loading the specified entity type by primary key
    *
    * @throws HibernateException If the specified Class cannot be resolved as a mapped entity
    */

   public IdentifierLoadAccess byId(Class entityClass);

   /**
    * Create an {@link NaturalIdLoadAccess} instance to retrieve the specified entity by
    * its natural id.
    * 
    * @param entityName The entity name of the entity type to be retrieved
    *
    * @return load delegate for loading the specified entity type by natural id
    *
    * @throws HibernateException If the specified entity name cannot be resolved as an entity name
    */

   public NaturalIdLoadAccess byNaturalId(String entityName);

   /**
    * Create an {@link NaturalIdLoadAccess} instance to retrieve the specified entity by
    * its natural id.
    * 
    * @param entityClass The entity type to be retrieved
    *
    * @return load delegate for loading the specified entity type by natural id
    *
    * @throws HibernateException If the specified Class cannot be resolved as a mapped entity
    */

   public NaturalIdLoadAccess byNaturalId(Class entityClass);

   /**
    * Create an {@link SimpleNaturalIdLoadAccess} instance to retrieve the specified entity by
    * its natural id.
    *
    * @param entityName The entity name of the entity type to be retrieved
    *
    * @return load delegate for loading the specified entity type by natural id
    *
    * @throws HibernateException If the specified entityClass cannot be resolved as a mapped entity, or if the
    * entity does not define a natural-id or if its natural-id is made up of multiple attributes.
    */

   public SimpleNaturalIdLoadAccess bySimpleNaturalId(String entityName);

   /**
    * Create an {@link SimpleNaturalIdLoadAccess} instance to retrieve the specified entity by
    * its simple (single attribute) natural id.
    *
    * @param entityClass The entity type to be retrieved
    *
    * @return load delegate for loading the specified entity type by natural id
    *
    * @throws HibernateException If the specified entityClass cannot be resolved as a mapped entity, or if the
    * entity does not define a natural-id or if its natural-id is made up of multiple attributes.
    */

   public SimpleNaturalIdLoadAccess bySimpleNaturalId(Class entityClass);

   /**
    * Enable the named filter for this current session.
    *
    * @param filterName The name of the filter to be enabled.
    *
    * @return The Filter instance representing the enabled filter.
    */

   public Filter enableFilter(String filterName);

   /**
    * Retrieve a currently enabled filter by name.
    *
    * @param filterName The name of the filter to be retrieved.
    *
    * @return The Filter instance representing the enabled filter.
    */

   public Filter getEnabledFilter(String filterName);

   /**
    * Disable the named filter for the current session.
    *
    * @param filterName The name of the filter to be disabled.
    */

   public void disableFilter(String filterName);
   
   /**
    * Get the statistics for this session.
    *
    * @return The session statistics being collected for this session
    */

   public SessionStatistics getStatistics();

   /**
    * Is the specified entity or proxy read-only?
    *
    * To get the default read-only/modifiable setting used for
    * entities and proxies that are loaded into the session:
    * @see org.hibernate.Session#isDefaultReadOnly()
    *
    * @param entityOrProxy an entity or HibernateProxy
    * @return {@code true} if the entity or proxy is read-only, {@code false} if the entity or proxy is modifiable.
    */

   public boolean isReadOnly(Object entityOrProxy);

   /**
    * Set an unmodified persistent object to read-only mode, or a read-only
    * object to modifiable mode. In read-only mode, no snapshot is maintained,
    * the instance is never dirty checked, and changes are not persisted.
    *
    * If the entity or proxy already has the specified read-only/modifiable
    * setting, then this method does nothing.
    * 
    * To set the default read-only/modifiable setting used for
    * entities and proxies that are loaded into the session:
    * @see org.hibernate.Session#setDefaultReadOnly(boolean)
    *
    * To override this session's read-only/modifiable setting for entities
    * and proxies loaded by a Query:
    * @see Query#setReadOnly(boolean)
    * 
    * @param entityOrProxy an entity or HibernateProxy
    * @param readOnly {@code true} if the entity or proxy should be made read-only; {@code false} if the entity or
    * proxy should be made modifiable
    */

   public void setReadOnly(Object entityOrProxy, boolean readOnly);

   /**
    * Controller for allowing users to perform JDBC related work using the Connection managed by this Session.
    *
    * @param work The work to be performed.
    * @throws HibernateException Generally indicates wrapped {@link java.sql.SQLException}
    */

   public void doWork(Work work) throws HibernateException;

   /**
    * Controller for allowing users to perform JDBC related work using the Connection managed by this Session.  After
    * execution returns the result of the {@link ReturningWork#execute} call.
    *
    * @param work The work to be performed.
    * @param <T> The type of the result returned from the work
    *
    * @return the result from calling {@link ReturningWork#execute}.
    *
    * @throws HibernateException Generally indicates wrapped {@link java.sql.SQLException}
    */

   public <T> doReturningWork(ReturningWork<T> work) throws HibernateException;

   /**
    * Disconnect the session from its underlying JDBC connection.  This is intended for use in cases where the
    * application has supplied the JDBC connection to the session and which require long-sessions (aka, conversations).
    * <p/>
    * It is considered an error to call this method on a session which was not opened by supplying the JDBC connection
    * and an exception will be thrown.
    * <p/>
    * For non-user-supplied scenarios, normal transaction management already handles disconnection and reconnection
    * automatically.
    *
    * @return the application-supplied connection or {@code null}
    *
    * @see #reconnect(Connection)
    */

   Connection disconnect();

   /**
    * Reconnect to the given JDBC connection.
    *
    * @param connection a JDBC connection
    * 
    * @see #disconnect()
    */

   void reconnect(Connection connection);

   /**
    * Is a particular fetch profile enabled on this session?
    *
    * @param name The name of the profile to be checked.
    * @return True if fetch profile is enabled; false if not.
    * @throws UnknownProfileException Indicates that the given name does not
    * match any known profile names
    *
    * @see org.hibernate.engine.profile.FetchProfile for discussion of this feature
    */

   public boolean isFetchProfileEnabled(String name) throws UnknownProfileException;

   /**
    * Enable a particular fetch profile on this session.  No-op if requested
    * profile is already enabled.
    *
    * @param name The name of the fetch profile to be enabled.
    * @throws UnknownProfileException Indicates that the given name does not
    * match any known profile names
    *
    * @see org.hibernate.engine.profile.FetchProfile for discussion of this feature
    */

   public void enableFetchProfile(String name) throws UnknownProfileException;

   /**
    * Disable a particular fetch profile on this session.  No-op if requested
    * profile is already disabled.
    *
    * @param name The name of the fetch profile to be disabled.
    * @throws UnknownProfileException Indicates that the given name does not
    * match any known profile names
    *
    * @see org.hibernate.engine.profile.FetchProfile for discussion of this feature
    */

   public void disableFetchProfile(String name) throws UnknownProfileException;

   /**
    * Convenience access to the {@link TypeHelper} associated with this session's {@link SessionFactory}.
    * <p/>
    * Equivalent to calling {@link #getSessionFactory()}.{@link SessionFactory#getTypeHelper getTypeHelper()}
    *
    * @return The {@link TypeHelper} associated with this session's {@link SessionFactory}
    */

   public TypeHelper getTypeHelper();

   /**
    * Retrieve this session's helper/delegate for creating LOB instances.
    *
    * @return This session's LOB helper
    */

   public LobHelper getLobHelper();

   /**
    * Contains locking details (LockMode, Timeout and Scope).
    */

   public interface LockRequest {
      /**
       * Constant usable as a time out value that indicates no wait semantics should be used in
       * attempting to acquire locks.
       */

      static final int PESSIMISTIC_NO_WAIT = 0;
      /**
       * Constant usable as a time out value that indicates that attempting to acquire locks should be allowed to
       * wait forever (apply no timeout).
       */

      static final int PESSIMISTIC_WAIT_FOREVER = -1;

      /**
       * Get the lock mode.
       *
       * @return the lock mode.
       */

      LockMode getLockMode();

      /**
       * Specify the LockMode to be used.  The default is LockMode.none.
       *
       * @param lockMode The lock mode to use for this request
       *
       * @return this LockRequest instance for operation chaining.
       */

      LockRequest setLockMode(LockMode lockMode);

      /**
       * Get the timeout setting.
       *
       * @return timeout in milliseconds, -1 for indefinite wait and 0 for no wait.
       */

      int getTimeOut();

      /**
       * Specify the pessimistic lock timeout (check if your dialect supports this option).
       * The default pessimistic lock behavior is to wait forever for the lock.
       *
       * @param timeout is time in milliseconds to wait for lock.  -1 means wait forever and 0 means no wait.
       *
       * @return this LockRequest instance for operation chaining.
       */

      LockRequest setTimeOut(int timeout);

      /**
       * Check if locking is cascaded to owned collections and relationships.
       *
       * @return true if locking will be extended to owned collections and relationships.
       */

      boolean getScope();

      /**
       * Specify if LockMode should be cascaded to owned collections and relationships.
       * The association must be mapped with {@code cascade="lock"} for scope=true to work.
       *
       * @param scope {@code true} to cascade locks; {@code false} to not.
       *
       * @return {@code this}, for method chaining
       */

      LockRequest setScope(boolean scope);

      /**
       * Perform the requested locking.
       *
       * @param entityName The name of the entity to lock
       * @param object The instance of the entity to lock
       */

      void lock(String entityName, Object object);

      /**
       * Perform the requested locking.
       *
       * @param object The instance of the entity to lock
       */

      void lock(Object object);
   }

   /**
    * Add one or more listeners to the Session
    *
    * @param listeners The listener(s) to add
    */

   public void addEventListeners(SessionEventListener... listeners);
}

[https://zhhll.icu/2020/框架/hibernate/基础/6.hibernate session接口/](https://zhhll.icu/2020/框架/hibernate/基础/6.hibernate session接口/)

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/295401.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【御控物联】JavaScript JSON结构转换(17):数组To对象——键值互换属性重组

文章目录 一、JSON结构转换是什么&#xff1f;二、核心构件之转换映射三、案例之《JSON数组 To JSON对象》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换…

MES可视化管理,提高制造业工厂管理水平

在制造业中&#xff0c;生产过程的可视化管理对于提高生产效率、降低成本以及提升决策的准确性和及时性至关重要。MES系统作为制造执行过程中的核心管理工具&#xff0c;为实现生产过程的可视化管理提供了有力支持。 生产车间应用MES生产管理系统之后&#xff0c;能通过电子屏幕…

异地文件如何共享访问?

异地文件共享访问是一种让不同地区的用户能够快速、安全地共享文件的解决方案。人们越来越需要在不同地点之间共享文件和数据。由于复杂的网络环境和安全性的问题&#xff0c;实现异地文件共享一直是一个挑战。 为了解决这个问题&#xff0c;许多公司和组织研发了各种异地文件共…

集成电路企业tapeout,如何保证机台数据准确、完整、高效地采集?

Tapeout即流片&#xff0c;集成电路行业中将CDS最终版电路图提交给半导体制造厂商进行物理生产的过程。在芯片设计与制造的流程中&#xff0c;Tapeout是非常重要的阶段&#xff0c;包括了布局&#xff08;Layout&#xff09;、连线&#xff08;Routing&#xff09;、分析&#…

基于SSM的“汽车销售分析与管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“汽车销售分析与管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 销售经理系统首页图 客户管理图 车辆…

数据采集工具如何使用呢?那么设置数据采集的方法又是什么呢?

数据采集工具将能够非常有效地解决面临的各种问题。这款工具被设计成一种自动化数据采集工具&#xff0c;特别适用于对日志文件数据的采集。一旦完成设置&#xff0c;该工具将在后台实时进行数据采集&#xff0c;并自动对收集到的数据进行清洗&#xff0c;以确保最终保存到的数…

Redis简介、常用命令

目录 一、关系数据库​​与非关系数据库​​ 1.1. 关系型数据库 1.2 非关系型数据库 1.3.关系数据库与非关系型数据库区别 1.3.1. 数据存储方式不同 1.3.2. 扩展方式不同 1.3.3.对事务性的支持不同 1.4.非关系型数据库产生背景 二、Redis 2.1.Redis简介 2.2.Redis的…

CentOS 7 下离线安装RabbitMQ教程

CentOS 7 下安装RabbitMQ教程一、做准备&#xff08;VMWare 虚拟机上的 CentOS 7 镜像 上安装的&#xff09; &#xff08;1&#xff09;准备RabbitMQ的安装包&#xff08;rabbitmq-server-3.8.5-1.el7.noarch&#xff09;下载地址mq https://github.com/rabbitmq/rabbitmq-se…

【OpenCV-颜色空间】

OpenCV-颜色空间 ■ RGB■ BGR■ HSV■ HSL■ HUE■ YUV ■ RGB ■ BGR BGR 就是RGB R和B调换位置。 OpenCV 默认使用BGR ■ HSV ■ HSL ■ HUE ■ YUV

实验四 微信小程序智能手机互联网程序设计(微信程序方向)实验报告

请编写一个用户登录界面&#xff0c;提示输入用户名和密码进行登录&#xff1b; 代码 index.wxml <view class"user"> <form bindreset""> <view>用户名&#xff1a;</view><input type"text"name""/>…

【面试八股总结】传输控制协议TCP(三)

参考资料 &#xff1a;小林Coding、阿秀、代码随想录 一、TCP拥塞控制⭐ 1. 慢启动 – Slow Start 慢启动是指TCP连接刚建立&#xff0c;一点一点地提速&#xff0c;试探一下网络的承受能力&#xff0c;以免直接扰乱了网络通道的秩序。 慢启动算法&#xff1a; 初始拥塞窗口…

图神经网络实战(7)——图卷积网络(Graph Convolutional Network, GCN)详解与实现

图神经网络实战&#xff08;7&#xff09;——图卷积网络详解与实现 0. 前言1. 图卷积层2. 比较 GCN 和 GNN2.1 数据集分析2.2 实现 GCN 架构 小结系列链接 0. 前言 图卷积网络 (Graph Convolutional Network, GCN) 架构由 Kipf 和 Welling 于 2017 年提出&#xff0c;其理念是…

Qt + VS2017 创建一个简单的图片加载应用程序

简介&#xff1a; 本文介绍了如何使用Qt创建一个简单的图片加载应用程序。该应用程序可以打开图片文件并在界面上显示选定的图片&#xff0c;并保存用户上次选择的图片路径。 1. 创建项目&#xff1a; 首先&#xff0c;在VS中创建一个新的Qt Widgets应用程序项目&#xff0c;并…

Electron的学习

目录 项目初始化可以看官网非常详细根路径创建.vscode文件夹主进程和渲染进程之前的通信ipcRenderer.send和ipcMain.on的使用ipcRenderer.invoke和ipcMain.handle的使用 切换主题模式文件拖放保存消息通知进度展示图标闪烁自定义菜单自定义右键菜单 项目初始化可以看官网非常详…

史上最强 PyTorch 2.2 GPU 版最新安装教程

一 深度学习主机 1.1 配置 先附上电脑配置图&#xff0c;如下&#xff1a; 利用公司的办公电脑对配置进行升级改造完成。除了显卡和电源&#xff0c;其他硬件都是公司电脑原装。 1.2 显卡 有钱直接上 RTX4090&#xff0c;也不能复用公司的电脑&#xff0c;其他配置跟不上。…

【树状数组专题】【蓝桥杯备考训练】:数星星、动态求连续区间和、一个简单的整数问题、一个简单的整数问题2【已更新完成】

目录 1、数星星&#xff08;《信息学奥赛一本通》 & ural 1028&#xff09; 思路&#xff1a; 基本思路&#xff1a; 树状数组经典三函数&#xff1a; 1、lowbit()函数 2、query()函数 3、add()函数 最终代码&#xff1a; 2、动态求连续区间和&#xff08;《信息学奥赛一本…

java电话号码的字母组合(力扣Leetcode17)

电话号码的字母组合 力扣原题链接 问题描述 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 示例 1&#xff1a;…

【Web】记录Polar靶场<困难>难度题一遍过

目录 上传 PHP是世界上最好的语言 非常好绕的命令执行 这又是一个上传 网站被黑 flask_pin veryphp 毒鸡汤 upload tutu Unserialize_Escape 自由的文件上传系统​​​​​​​ ezjava 苦海 你想逃也逃不掉 safe_include CB链 phar PHP_Deserializatio…

算法整理:二分查找

1二分查找&#xff1a;在有序集合搜索特定值的过程&#xff0c;每次比较之后将查找空间一分为二。 target:要查找的值 index:当前位置 left,right:维持查找空间的指标 mid:用来确定向左查还是向右查的索引 查找空间: [left,right] 二分查找维护left&#xff0c;right&#xff0…

QA测试开发工程师面试题满分问答4: 如何测试购物车功能?

当测试一个购物车时&#xff0c;我们需要采用全面的测试策略&#xff0c;以确保购物车在各种情况下的功能正常、性能良好和用户体验优秀。以下是一个详细的测试计划&#xff0c;包含了各个方面的测试。 功能测试&#xff1a; 添加商品到购物车&#xff1a;验证能否将商品成功添…