复代码代码如下:
패키지 다오;
import org.hibernate.HibernateException;
org.hibernate.Session 가져오기;
import org.hibernate.cfg.Configuration;
/**
* @author minxuenetcn
*/
공개 클래스 HibernateSessionFactory {
private final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
개인 구성 구성 = 새 구성();
개인 org.hibernate.SessionFactory sessionFactory;
/**
* hibernate.cfg.xml
* @param 구성 파일
*/
공개 무효 setConfiguration(String configFile){
this.configuration=새 구성();
구성.구성(configFile);
}
/**
* ThreadLocal 세션 인스턴스를 반환합니다.
* @return 세션
* @throws HibernateException
*/
공개 세션 getSession()에서 HibernateException이 발생합니다.
세션 세션 = (세션) threadLocal.get();
if (세션 == null || !session.isOpen()) {
if (sessionFactory == null) {
재구축SessionFactory();
}
세션 = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(세션);
}
복귀 세션;
}
/**
* 최대 절전 모드 세션 팩토리 재구축
*
*/
공공 무효 재구축SessionFactory() {
노력하다 {
sessionFactory = this.configuration.buildSessionFactory();
} 잡기(예외 e) {
시스템.err
.println("SessionFactory %%%% 생성 중 %%%% 오류 발생");
e.printStackTrace();
}
}
/**
* 단일 최대 절전 모드 세션 인스턴스를 닫습니다.
*
* @throws HibernateException
*/
공개 무효 closeSession()에서 HibernateException이 발생합니다.
세션 세션 = (세션) threadLocal.get();
threadLocal.set(null);
if (세션 != null) {
세션.닫기();
}
}
/**
* 세션 팩토리 반환
*
*/
공개 org.hibernate.SessionFactory getSessionFactory() {
세션팩토리를 반환합니다.
}
/**
* 최대 절전 모드 구성 반환
*/
공개 구성 getConfiguration() {
반환 구성;
}
}