Sesión: es una sesión entre la aplicación y la base de datos, el centro de la operación hibernada y la base de las operaciones de la capa de persistencia. El ciclo de vida de los objetos/gestión de transacciones/acceso a la base de datos está estrechamente relacionado con la sesión.
El objeto de sesión se crea a través de SessionFactory. Aquí hay un ejemplo para introducir dos formas de obtener sesiones de Hibernate.
Los registros son una preocupación muy común en la programación. Cuando los usuarios operan en bases de datos, deben grabar esta serie de operaciones para rastrear la dinámica de la base de datos. Entonces, cuando un usuario inserta un registro en la base de datos, tiene que grabar un registro en el archivo de registro. La serie de operaciones del usuario debe llevarse a cabo en una sesión, de lo contrario, esto se convertirá en dos hilos. No hay garantía de sincronización. Mira el siguiente código
Herramientas de sesión de gestión de hibernateutil
paquete com.bjpowernode.usermgr.util; import org.hibernate.session; // Import de Hibernate3 org.hibernate.sessionFactory; import org.hibernate.cfg.configuration; public class hibernateUtils {sessionFactory shatic factory; static {inty {// thybebernate.cfgfg. cfg = new Configuration (). Configure (); // Crear sessionFactory factory = cfg.BuildSessionFactory ();} Catch (Exception e) {E.PrintStackTrace ();}} // Obtenga la sesión pública de sesión abierta getSession () {return factory.opensession ();} // session session public static void void closession (sesión session sessession (sessation sesation () {return factory.opensession ();} // Closesession de sesia estatic void de sesión de sesión de sesión sesión) {if (session! = null) {if (session.isopen ()) {session.close ();}}} public sessionFactory getSessionFactory () {return factory;}}}Capa lógica comercial del usuario
paquete com.bjpowernode.usermgr.Manager; import java.util.date; import org.hibernate.session; import com.bjpowernode.usermgr.domain.log; import com.bjpowernode.usermgr.domain.user; import USERMANAGER {/** * Tanto agregar usuarios como agregar registros usan la misma sesión, por lo que * Al agregar usuarios falla, los registros también fallarán. Transaction Rollback* El usuario agrega registros de éxito y también agregará éxito*/public void addUser (usuario de usuario) {session session = null; try {// obtenga la sesión de la sesión de subproceso actual = hibernateutil.getSessionFactory (). GetCurrentsession (); session.begintransaction (); // guardar user.save (usuarios); log = log log (); log.ssettype ("operation. Log "); log.setTime (new date ()); log.setDetail (" xxx "); logManager logManager = new LogManageRiMpl (); // Guardar logs LogManager.addlog (log); session.getTransaction (). Commit ();} catch (excepción e) {e.printStackTrace;Clase de implementación de registro:
paquete com.bjpowernode.usermgr.manager; import org.hibernate.session; import com.bjpowernode.usermgr.domain.log; import com.bjpowernode.usermgr.util.hibernateUtils; public class logManagerImpl implementa logmanager {public void complem HibernateUtils.getSessionFactory (). GetCurrentSession (). Save (log);}}Clase de prueba
paquete com.bjpowernode.usermgr.manager; import junit.framework.testcase; import com.bjpowernode.usermgr.domain.user; public class UsermanagerImplTest extiende testcase {public void testduser () {usermanager usermanager = new usermanagerImpl (user user = new user (); user.setName ("Zhang San"); usermanager.adduser (usuario); }Aviso:
1. ¿Cuál es la diferencia entre Opensession y GetCurrentsession?
*Se debe cerrar la Abertura, la Corriente se cerrará automáticamente después de completar la transacción.
*La abertura no está vinculada al subproceso actual, Correntsession está vinculado al hilo actual
2. Si usa Currentsession, debe configurarlo en el archivo hibernate.cfg.xml:
*Si es una transacción local (transacción JDBC)
<Propertyname = "Hibernate.Current_Session_Context_Class"> Thread </Property>
*Si es una transacción global (transacción JTA)
<Propertyname = "Hibernate.Current_Session_Context_Class"> JTA </property>
Transacciones globales: transacciones administradas y coordinadas por el explorador que puede abarcar múltiples bases de datos y procesos. El administrador de recursos generalmente utiliza el protocolo de envío de dos etapas XA para interactuar con el "Sistema de información empresarial" (EIS) o la base de datos.
Transacciones locales: transacciones locales a una sola EIS o base de datos y restringidas a un solo proceso. Las transacciones locales no involucran múltiples fuentes de datos.
Resumir
Lo anterior es todo el contenido de este artículo sobre los dos ejemplos de código de obtención de la sesión en Hibernate. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a:
Análisis de la instancia de agregar, eliminar, revisar y buscar a través de la sesión
Aprenda rápidamente sobre la sesión en Hibernate
Hibernate usa HBM.xml para configurar el análisis de relaciones de mapeo
Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!