📄 session.java
字号:
//$Id: Session.java 8785 2005-12-08 06:57:06Z oneovthafew $
package org.hibernate;
import java.io.Serializable;
import java.sql.Connection;
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 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();
/**
* Set the cache mode.
*/
public void setCacheMode(CacheMode cacheMode);
/**
* Get the current cache mode.
*/
public CacheMode getCacheMode();
/**
* Get the <tt>SessionFactory</tt> that created this instance.
* @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
*/
public 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 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.
* <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.
* <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 <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. 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, Serializable id)
* @param object a transient or detached instance containing new or updated state
* @throws HibernateException
*/
public void saveOrUpdate(Object object) 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. 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, Serializable id)
* @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
*/
public void update(String entityName, Object object) 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, 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 <tt>cascade="merge"</tt>.<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -