Hibernate - Sesiones
Una sesión se utiliza para obtener una conexión física con una base de datos. El objeto Session es liviano y está diseñado para instanciarse cada vez que se necesita una interacción con la base de datos. Los objetos persistentes se guardan y recuperan a través de un objeto de sesión.
Los objetos de sesión no deben mantenerse abiertos durante mucho tiempo porque normalmente no son seguros para subprocesos y deben crearse y destruirse según sea necesario. La función principal de la sesión es ofrecer, crear, leer y eliminar operaciones para instancias de clases de entidad mapeadas.
Pueden existir instancias en uno de los siguientes tres estados en un momento dado:
transient - Una nueva instancia de una clase persistente, que no está asociada con una sesión y no tiene representación en la base de datos y no se considera un valor de identificador transitorio por Hibernate.
persistent- Puede hacer que una instancia transitoria sea persistente asociándola con una sesión. Una instancia persistente tiene una representación en la base de datos, un valor identificador y está asociada con una sesión.
detached - Una vez que cerramos la sesión de Hibernate, la instancia persistente se convertirá en una instancia separada.
Una instancia de sesión es serializable si sus clases persistentes son serializables. Una transacción típica debe usar el siguiente idioma:
Session session = factory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
// do some work
...
tx.commit();
}
catch (Exception e) {
if (tx!=null) tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
Si la sesión genera una excepción, la transacción debe revertirse y la sesión debe descartarse.
Métodos de interfaz de sesión
Hay varios métodos proporcionados por el Sessioninterfaz, pero voy a enumerar solo algunos métodos importantes, que usaremos en este tutorial. Puede consultar la documentación de Hibernate para obtener una lista completa de los métodos asociados conSession y SessionFactory.
No Señor. | Métodos de sesión y descripción |
---|---|
1 | Transaction beginTransaction() Inicie una unidad de trabajo y devuelva el objeto Transacción asociado. |
2 | void cancelQuery() Cancelar la ejecución de la consulta actual. |
3 | void clear() Limpia completamente la sesión. |
4 | Connection close() Finalice la sesión liberando la conexión JDBC y limpiando. |
5 | Criteria createCriteria(Class persistentClass) Cree una nueva instancia de Criteria, para la clase de entidad dada, o una superclase de una clase de entidad. |
6 | Criteria createCriteria(String entityName) Cree una nueva instancia de Criteria, para el nombre de entidad dado. |
7 | Serializable getIdentifier(Object object) Devuelve el valor del identificador de la entidad dada como asociado con esta sesión. |
8 | Query createFilter(Object collection, String queryString) Cree una nueva instancia de Query para la colección y la cadena de filtro dadas. |
9 | Query createQuery(String queryString) Cree una nueva instancia de Query para la cadena de consulta HQL dada. |
10 | SQLQuery createSQLQuery(String queryString) Cree una nueva instancia de SQLQuery para la cadena de consulta SQL dada. |
11 | void delete(Object object) Elimina una instancia persistente del almacén de datos. |
12 | void delete(String entityName, Object object) Elimina una instancia persistente del almacén de datos. |
13 | Session get(String entityName, Serializable id) Devuelve la instancia persistente de la entidad nombrada dada con el identificador dado, o null si no existe tal instancia persistente. |
14 | SessionFactory getSessionFactory() Obtenga la fábrica de sesiones que creó esta sesión. |
15 | void refresh(Object object) Vuelva a leer el estado de la instancia dada de la base de datos subyacente. |
dieciséis | Transaction getTransaction() Obtenga la instancia de Transaction asociada con esta sesión. |
17 | boolean isConnected() Compruebe si la sesión está conectada actualmente. |
18 | boolean isDirty() ¿Esta sesión contiene algún cambio que deba sincronizarse con la base de datos? |
19 | boolean isOpen() Compruebe si la sesión aún está abierta. |
20 | Serializable save(Object object) Persiste la instancia transitoria dada, primero asignando un identificador generado. |
21 | void saveOrUpdate(Object object) Guarde (Objeto) o actualice (Objeto) la instancia dada. |
22 | void update(Object object) Actualice la instancia persistente con el identificador de la instancia separada dada. |
23 | void update(String entityName, Object object) Actualice la instancia persistente con el identificador de la instancia separada dada. |