📄 session.java
字号:
//$Id: Session.java 11494 2007-05-09 02:00:16Z steve.ebersole@jboss.com $package org.hibernate;import java.io.Serializable;import java.sql.Connection;import org.hibernate.jdbc.Work;import org.hibernate.stat.SessionStatistics;/** * The main runtime interface between a Java application and Hibernate. This is the * central API class abstracting the notion of a persistence service.<br> * <br> * The lifecycle of a <tt>Session</tt> is bounded by the beginning and end of a logical * transaction. (Long transactions might span several database transactions.)<br> * <br> * The main function of the <tt>Session</tt> is to offer create, read and delete operations * for instances of mapped entity classes. Instances may exist in one of three states:<br> * <br> * <i>transient:</i> never persistent, not associated with any <tt>Session</tt><br> * <i>persistent:</i> associated with a unique <tt>Session</tt><br> * <i>detached:</i> previously persistent, not associated with any <tt>Session</tt><br> * <br> * Transient instances may be made persistent by calling <tt>save()</tt>, * <tt>persist()</tt> or <tt>saveOrUpdate()</tt>. Persistent instances may be made transient * by calling<tt> delete()</tt>. Any instance returned by a <tt>get()</tt> or * <tt>load()</tt> method is persistent. Detached instances may be made persistent * by calling <tt>update()</tt>, <tt>saveOrUpdate()</tt>, <tt>lock()</tt> or <tt>replicate()</tt>. * The state of a transient or detached instance may also be made persistent as a new * persistent instance by calling <tt>merge()</tt>.<br> * <br> * <tt>save()</tt> and <tt>persist()</tt> result in an SQL <tt>INSERT</tt>, <tt>delete()</tt> * in an SQL <tt>DELETE</tt> and <tt>update()</tt> or <tt>merge()</tt> in an SQL <tt>UPDATE</tt>. * Changes to <i>persistent</i> instances are detected at flush time and also result in an SQL * <tt>UPDATE</tt>. <tt>saveOrUpdate()</tt> and <tt>replicate()</tt> result in either an * <tt>INSERT</tt> or an <tt>UPDATE</tt>.<br> * <br> * It is not intended that implementors be threadsafe. Instead each thread/transaction * should obtain its own instance from a <tt>SessionFactory</tt>.<br> * <br> * A <tt>Session</tt> instance is serializable if its persistent classes are serializable.<br> * <br> * A typical transaction should use the following idiom: * <pre> * Session sess = factory.openSession(); * Transaction tx; * try { * tx = sess.beginTransaction(); * //do some work * ... * tx.commit(); * } * catch (Exception e) { * if (tx!=null) tx.rollback(); * throw e; * } * finally { * sess.close(); * } * </pre> * <br> * If the <tt>Session</tt> throws an exception, the transaction must be rolled back * and the session discarded. The internal state of the <tt>Session</tt> might not * be consistent with the database after the exception occurs. * * @see SessionFactory * @author Gavin King */public interface Session extends Serializable { /** * Retrieve the entity mode in effect for this session. * * @return The entity mode for this session. */ public EntityMode getEntityMode(); /** * Starts a new Session with the given entity mode in effect. This secondary * Session inherits the connection, transaction, and other context * information from the primary Session. It doesn't need to be flushed * or closed by the developer. * * @param entityMode The entity mode to use for the new session. * @return The new session */ public Session getSession(EntityMode entityMode); /** * Force this session to flush. Must be called at the end of a * unit of work, before commiting the transaction and closing the * session (depending on {@link #setFlushMode flush-mode}, * {@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(); /** * Get the session factory which created this session. * * @return The session factory. * @see SessionFactory */ public SessionFactory getSessionFactory(); /** * Get the JDBC connection of this Session.<br> * <br> * If the session is using aggressive collection release (as in a * CMT environment), it is the application's responsibility to * close the connection returned by this call. Otherwise, the * application should not close the connection. * * @return the JDBC connection in use by the <tt>Session</tt> * @throws HibernateException if the <tt>Session</tt> is disconnected * @deprecated (scheduled for removal in 4.x). Replacement depends on need; for doing direct JDBC stuff use * {@link #doWork}; for opening a 'temporary Session' use (TBD). */ public Connection connection() throws HibernateException; /** * End the session by releasing the JDBC connection and cleaning up. It is * not strictly necessary to close the session but you must at least * {@link #disconnect()} it. * * @return the connection provided by the application or null. * @throws HibernateException Indicates problems cleaning up. */ public Connection close() throws HibernateException; /** * Cancel the execution of the current query. * <p/> * This is the sole method on session which may be safely called from * another thread. * * @throws HibernateException There was a problem canceling the query */ public void cancelQuery() throws HibernateException; /** * Check if the session is still open. * * @return boolean */ public boolean isOpen(); /** * Check if the session is currently connected. * * @return boolean */ public boolean isConnected(); /** * Does this session contain any changes which must be synchronized with * the database? In other words, would any DML operations be executed if * we flushed this session? * * @return True if the session contains pending changes; false otherwise. * @throws HibernateException could not perform dirtying checking */ public boolean isDirty() throws HibernateException; /** * Return the identifier value of the given entity as associated with this * session. An exception is thrown if the given entity instance is transient * or detached in relation to this session. * * @param object a persistent instance * @return the identifier * @throws TransientObjectException if the instance is transient or associated with * a different session */ public Serializable getIdentifier(Object object) throws HibernateException; /** * 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 a persistent instance * @throws HibernateException */ public void evict(Object object) throws HibernateException; /** * 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 * @throws HibernateException */ public Object load(Class theClass, Serializable id, LockMode lockMode) throws HibernateException; /** * 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 * @throws HibernateException */ public Object load(String entityName, Serializable id, LockMode lockMode) throws HibernateException; /** * 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 * @throws HibernateException */ public Object load(Class theClass, Serializable id) throws HibernateException; /** * 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 * @throws HibernateException */ public Object load(String entityName, Serializable id) throws HibernateException; /** * 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 * @throws HibernateException */ public void load(Object object, Serializable id) throws HibernateException; /** * 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 <tt>cascade="replicate"</tt>. * * @param object a detached instance of a persistent class */ public void replicate(Object object, ReplicationMode replicationMode) throws HibernateException; /** * 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 <tt>cascade="replicate"</tt>. * * @param object a detached instance of a persistent class */ public void replicate(String entityName, Object object, ReplicationMode replicationMode) throws HibernateException; /** * Persist the given transient instance, first assigning a generated identifier. (Or * using the current value of the identifier property if the <tt>assigned</tt> * generator is used.) This operation cascades to associated instances if the * association is mapped with <tt>cascade="save-update"</tt>. * * @param object a transient instance of a persistent class * @return the generated identifier * @throws HibernateException */ public Serializable save(Object object) throws HibernateException; /** * Persist the given transient instance, first assigning a generated identifier. (Or * using the current value of the identifier property if the <tt>assigned</tt> * generator is used.) This operation cascades to associated instances if the * association is mapped with <tt>cascade="save-update"</tt>. * * @param object a transient instance of a persistent class * @return the generated identifier * @throws HibernateException */ public Serializable save(String entityName, Object object) throws HibernateException; /** * Either {@link #save(Object)} or {@link #update(Object)} the given * instance, depending upon resolution of the unsaved-value checks (see the * manual for discussion of unsaved-value checking). * <p/> * This operation cascades to associated instances if the association is mapped * with <tt>cascade="save-update"</tt>. * * @see Session#save(java.lang.Object) * @see Session#update(Object object) * @param object a transient or detached instance containing new or updated state * @throws HibernateException */ public void saveOrUpdate(Object object) throws HibernateException; /** * Either {@link #save(String, Object)} or {@link #update(String, Object)} * the given instance, depending upon resolution of the unsaved-value checks * (see the manual for discussion of unsaved-value checking). * <p/> * This operation cascades to associated instances if the association is mapped * with <tt>cascade="save-update"</tt>. * * @see Session#save(String,Object) * @see Session#update(String,Object) * @param object a transient or detached instance containing new or updated state * @throws HibernateException */ public void saveOrUpdate(String entityName, Object object) throws HibernateException; /** * Update the persistent instance with the identifier of the given detached * instance. If there is a persistent instance with the same identifier, * an exception is thrown. This operation cascades to associated instances * if the association is mapped with <tt>cascade="save-update"</tt>. * * @param object a detached instance containing updated state * @throws HibernateException */ public void update(Object object) throws HibernateException; /** * Update the persistent instance with the identifier of the given detached * instance. If there is a persistent instance with the same identifier, * an exception is thrown. This operation cascades to associated instances * if the association is mapped with <tt>cascade="save-update"</tt>. * * @param object a detached instance containing updated state * @throws HibernateException
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -