세션 : 응용 프로그램과 데이터베이스 사이의 세션, 최대 절전 모드 작동 중심 및 지속성 계층 작업의 기초입니다. 객체/트랜잭션 관리/데이터베이스 액세스의 수명주기는 세션과 밀접한 관련이 있습니다.
세션 객체는 SessionFactory를 통해 구축됩니다. 다음은 최대 절전 모드로 세션을 얻는 두 가지 방법을 소개하는 예입니다.
로그는 프로그래밍에서 매우 일반적인 관심사입니다. 사용자가 데이터베이스에서 작동하면 데이터베이스의 역학을 추적하기 위해이 일련의 작업을 녹화해야합니다. 따라서 사용자가 데이터베이스에 레코드를 삽입하면 로그 파일에 레코드를 녹음해야합니다. 사용자의 일련의 작업은 세션에서 수행되어야합니다. 그렇지 않으면 두 스레드가됩니다. 동기화 보장은 없습니다. 다음 코드를보십시오
Hibernateutil 관리 세션 도구
package com.bjpowernode.usermgr.util; import org.hibernate.session; // hibernate3의 import org.hibernate.sessionfactory; import org.hibernate.cfg.configuration; public hibernateutils {private static session factory factory; static {// read hibernate.cfernate.cfernate.cfernate. cfg = new configuration (); configure (); // sessionFactory factory = cfg.buildsessionfactory ();} catch (Exception e) {e.printstacktrace ();}} // 공개 세션 GET PUBLIC STATIC SESSION GETSESSESS () {return factory.opensession (); 세션) {if (session! = null) {if (session.isopen ()) {session.close ();}}} public static sessionfactory getsessionFactory () {return factory;}}}사용자 비즈니스 로직 계층
package com.bjpowernode.usermgr.manager; import java.util.date; import org.hibernate.session; import com.bjpowernode.usermgr.domain.log; import com.bjpowernode.usermgr.user; import com.bjpowernode.usermgr.utermgr.UberNUTILGENGELAGERMANTERMANTERMANTERS; {/** * 사용자 추가 및 로그 추가는 동일한 세션을 사용하므로 * 사용자 추가가 실패 할 때 로그도 실패합니다. 트랜잭션 롤백* 사용자는 성공 로그를 추가하고 성공*/public void addUser (사용자 user) {session session = null; try {// 현재 스레드 세션을 얻습니다. log "); log.settime (new date ()); log.setdetail ("xxx "); logmanager logmanager = new logmanagerimpl (); // logs logmanager.addlog (log); session.getTransaction (). commit ();} catch (exception e) {exprintstacktrace ())}}.로그 구현 클래스 :
com.bjpowernode.usermgr.manager; import org.hibernate.session; import com.bjpowernode.usermgr.domain.log; import com.bjpowernode.usermgr.util.hibernateutils; public class logmanagerimpll logmanager {public void addlog (log log) {// get session of the get session of the get session of the get session of the get session of the get session. hibernateutils.getSessionFactory (). getCurrentSess (). 저장 (log);}}테스트 클래스
package com.bjpowernode.usermgr.manager; import junit.framework.testcase; import com.bjpowernode.usermgr.user.user; public class usermanagerimpltest extends testcase {public void testadduser () {userManager userManager = new userManagerImpl (); new User ();user.setName ( "Zhang San"); usermanager.adduser (사용자); }
알아채다:
1. OpenSession과 GetCurrentsess의 차이점은 무엇입니까?
*Oredession은 닫아야하며 트랜잭션이 완료된 후에 전류 세션이 자동으로 닫힙니다.
*Oredession은 현재 스레드에 바인딩되지 않으며 Currentsession은 현재 스레드에 바인딩됩니다.
2. Currentsession을 사용하는 경우 Hibernate.cfg.xml 파일에서 구성해야합니다.
*지역 거래 인 경우 (JDBC 거래)
<propertyname = "hibernate.current_session_context_class"> 스레드 </property>
*글로벌 트랜잭션 인 경우 (JTA 거래)
<propertyname = "hibernate.current_session_context_class"> jta </property>
글로벌 트랜잭션 : 여러 데이터베이스 및 프로세스에 걸쳐있을 수있는 탐색기가 관리하고 조정하는 트랜잭션. 리소스 관리자는 일반적으로 XA 2 단계 제출 프로토콜을 사용하여 "ESIS (Enterprise Information System)"(EIS) 또는 데이터베이스와 상호 작용합니다.
로컬 거래 : 단일 EIS 또는 데이터베이스에 로컬로 이동하여 단일 프로세스로 제한됩니다. 로컬 거래에는 여러 데이터 소스가 포함되지 않습니다.
요약
위는이 기사의 전체 내용입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구들은 계속 참조 할 수 있습니다.
세션을 통해 추가, 삭제, 수정 및 검색 인스턴스 분석
최대 절전 모드 세션에 대해 빠르게 배우십시오
Hibernate는 hb.xml을 사용하여 매핑 관계 분석을 구성합니다
단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!