📄 session.java
字号:
//$Id: Session.java,v 1.19.2.18 2004/01/25 03:54:13 oneovthafew Exp $package net.sf.hibernate;import net.sf.hibernate.type.Type;import java.io.Serializable;import java.sql.Connection;import java.util.Collection;import java.util.Iterator;import java.util.List;/** * 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, find and delete operations * for instances of mapped entity classes. Instances may exist in one of two states:<br> * <br> * <i>transient:</i> not associated with any <tt>Session</tt><br> * <i>persistent:</i> associated with a <tt>Session</tt><br> * <br> * Transient instances may be made persistent by calling <tt>save()</tt>, * <tt>update()</tt> or <tt>saveOrUpdate()</tt>. Persistent instances may be made transient * by calling<tt> delete()</tt>. Any instance returned by a <tt>find(), iterate()</tt> or * <tt>load()</tt> method is persistent.<br> * <br> * <tt>save()</tt> results in an SQL <tt>CREATE</tt>, <tt>delete()</tt> * in an SQL <tt>DELETE</tt> and <tt>update()</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>.<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 { /** * Force the <tt>Session</tt> to flush. Must be called at the end of a * unit of work, before commiting the transaction and closing the * session (<tt>Transaction.commit()</tt> calls this method). <i>Flushing</i> * is the process of synchronising the underlying persistent store with * persistable state held in memory. * * @throws HibernateException */ public void flush() throws HibernateException; /** * Set the flush mode. The flush mode determines at which points * Hibernate automatically flushes the session. For a readonly * session, it is reasonable to set the flush mode to * <tt>FlushMode.NEVER</tt> at the start of the session (in * order to achieve some extra performance). * * @see FlushMode * @param flushMode the FlushMode */ public void setFlushMode(FlushMode flushMode); /** * Get the current flush mode. * * @return FlushMode */ public FlushMode getFlushMode(); /** * Get the <tt>SessionFactory</tt> that created this instance. * @see SessionFactory */ public SessionFactory getSessionFactory(); /** * Get the JDBC connection. Applications are responsible for * calling commit/rollback upon the connection before closing * the <tt>Session</tt>. * * @return the JDBC connection in use by the <tt>Session</tt> * @throws HibernateException if the <tt>Session</tt> is disconnected */ public Connection connection() throws HibernateException; /** * Disconnect the <tt>Session</tt> from the current JDBC connection. If * the connection was obtained by Hibernate, close it or return it to the * connection pool. Otherwise return it to the application.<br> * <br> * This is used by applications which require long transactions. * * @return the connection provided by the application or <tt>null</tt> * @throws HibernateException if the <tt>Session</tt> is disconnected * @see Session#reconnect() */ public Connection disconnect() throws HibernateException; /** * Obtain a new JDBC connection. This is used by applications which * require long transactions. * * @see Session#disconnect() * @throws HibernateException */ public void reconnect() throws HibernateException; /** * Reconnect to the given JDBC connection. This is used by applications * which require long transactions. * * @param connection a JDBC connection * @throws HibernateException if the <tt>Session</tt> is connected * @see Session#disconnect() */ public void reconnect(Connection connection) throws HibernateException; /** * End the <tt>Session</tt> by disconnecting from the JDBC connection and * cleaning up. It is not strictly necessary to <tt>close()</tt> the * <tt>Session</tt> but you must at least <tt>disconnect()</tt> it. * * @return the connection provided by the application * or <tt>null</tt> * @throws HibernateException */ public Connection close() throws HibernateException; /** * Cancel execution of the current query. May be called from one thread * to stop execution of a query in another thread. Use with care! */ public void cancelQuery() throws HibernateException; /** * Check if the <tt>Session</tt> is still open. * * @return boolean */ public boolean isOpen(); /** * Check if the <tt>Session</tt> is currently connected. * * @return boolean */ public boolean isConnected(); /** * Does this <tt>Session</tt> contain any changes which must be * synchronized with the database? Would any SQL be executed if * we flushed this session? * * @return boolean */ public boolean isDirty() throws HibernateException; /** * Return the identifier of an entity instance cached by the <tt>Session</tt>, or * throw an exception if the instance is transient or associated with a different * <tt>Session</tt>. * * @param object a persistent instance * @return the identifier * @throws HibernateException if the <tt>Session</tt> is connected */ 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. * * @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, * assuming that the instance exists. * <br><br> * You should not use this method to determine if an instance exists (use <tt>find()</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; /** * 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 all reachable transient objects, reusing the current identifier * values. * * @param object a transient instance of a persistent class */ public void replicate(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.) * * @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, using the given identifier. * * @param object a transient instance of a persistent class * @param id an unused valid identifier * @throws HibernateException */ public void save(Object object, Serializable id) throws HibernateException; /** * Either <tt>save()</tt> or <tt>update()</tt> the given instance, depending upon the value of * its identifier property. By default the instance is always saved. This behaviour may be * adjusted by specifying an <tt>unsaved-value</tt> attribute of the identifier property * mapping. * * @see Session#save(java.lang.Object) * @see Session#update(Object object, Serializable id) * @param object a transient instance containing new or updated state * @throws HibernateException */ public void saveOrUpdate(Object object) throws HibernateException; /** * Update the persistent instance with the identifier of the given transient * instance. If there is a persistent instance with the same identifier, * an exception is thrown.<br> * <br> * If the given transient instance has a <tt>null</tt> identifier, an exception * will be thrown.<br> * <br> * * @param object a transient instance containing updated state * @throws HibernateException */ public void update(Object object) throws HibernateException; /** * Update the persistent state associated with the given identifier. An exception * is thrown if there is a persistent instance with the same identifier in the * current session.<br> * <br> * * @param object a transient instance containing updated state * @param id identifier of persistent instance * @throws HibernateException */ public void update(Object object, Serializable id) throws HibernateException; /** * 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 or does not exist in the database, save it and * return it as a newly persistent instance. Otherwise, the given instance * does not become associated with the session. * * @param object a transient instance with state to be copied * @return an updated persistent instance */ public Object saveOrUpdateCopy(Object object) throws HibernateException; /** * Copy the state of the given object onto the persistent object with the * given identifier. If there is no persistent instance currently associated * with the session, it will be loaded. Return the persistent instance. If * there is no database row with the given identifier, save the given instance
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -