session.java

来自「hibernate-distribution-3.3.1.GA-dist.zip」· Java 代码 · 共 817 行 · 第 1/3 页

JAVA
817
字号
/* * Hibernate, Relational Persistence for Idiomatic Java * * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as * indicated by the @author tags or express copyright attribution * statements applied by the authors.  All third-party contributions are * distributed under license by Red Hat Middleware LLC. * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA  02110-1301  USA * */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	 */

⌨️ 快捷键说明

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