Hibernate 4.X获取session

package cn.com.songjy.sh.util;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateSessionFactory {
private static Configuration configuration = null;
private static SessionFactory sessionFactory = null;
/*ServiceRegistry是Hibernate4.X新增接口,
应用于Hibernate的配置或者服务等将统一向这个ServiceRegistry注册后才能生效。
所以需要构建一个ServiceRegistry对象,将配置信息向它注册,然后Configuration对象根据从这个ServiceRegistry对象中获取配置信息生成SessionFactory。
Hibernate4的配置入口不再是Configuration对象,而是ServiceRegistry对象,Configuration对象将通过ServiceRegistry对象获取配置信息。
hibernate4 源码位置:org.hibernate.service.ServiceRegistryBuilder 具体可参看hibernate源码。以及API*/
private static ServiceRegistry serviceRegistry = null;


static {
try {
// 首先获取配置信息
configuration = new Configuration().configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();

// 创建Session Factory
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (HibernateException e) {
// System.out.println("SessionFactory创建失败");
e.printStackTrace();
}
}

public static Session getSession() {
Session session = null;
if(null==session || false==session.isOpen()){
session = sessionFactory.openSession();
}

return session;
}

public static void closeSession(Session session){
try {
if(null!=session && session.isOpen())
session.close();
} catch (HibernateException e) {
e.printStackTrace();
}
}
}


package cn.com.songjy.sh.util;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateSessionManager {

private static Configuration configuration = null;
private static SessionFactory sessionFactory = null;

private static ServiceRegistry serviceRegistry = null;

static {
try {
// 首先获取配置信息
configuration = new Configuration().configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();

// 创建Session Factory
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (HibernateException e) {
// System.out.println("SessionFactory创建失败");
e.printStackTrace();
}
}


private static final ThreadLocal<Session> ThreadLocal_Session = new ThreadLocal<Session>();
private static final ThreadLocal<Transaction> ThreadLocal_Transaction = new ThreadLocal<Transaction>();

/**
* 获取当前线程中的Session
*/
public static Session getThreadLocalSession(){

Session session = ThreadLocal_Session.get();

if(null == session || (false==session.isOpen())){
session = sessionFactory.openSession();
ThreadLocal_Session.set(session);
}

return session;
}

/**
* 启动或者加入当前线程中Session的Transaction
*/
public static Transaction getThreadLocalTransaction(){
Transaction transaction = ThreadLocal_Transaction.get();
if(null == transaction){
transaction = getThreadLocalSession().beginTransaction();
ThreadLocal_Transaction.set(transaction);
}

return transaction;
}

/**
* 提交当前线程中Session的Transaction
*/
public static void commitThreadLocalTransaction(){
try {
Transaction transaction = ThreadLocal_Transaction.get();
if(null != transaction)
transaction.commit();
// ThreadLocal_Transaction.set(null);
ThreadLocal_Transaction.remove();
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 回滚当前线程中Session的Transaction事物
*/
public static void rollbackThreadLocalTransaction(){
try {
Transaction transaction = ThreadLocal_Transaction.get();
if(null != transaction && transaction.isActive())
transaction.rollback();
// ThreadLocal_Transaction.set(null);
ThreadLocal_Transaction.remove();
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 关闭当前线程中的Session
*/
public static void closeThreadLocalSession(){
Session session = ThreadLocal_Session.get();

try {
if(null != session)
if(true == session.isOpen())
session.close();
} catch (HibernateException e) {
e.printStackTrace();
}
// ThreadLocal_Session.set(null);
ThreadLocal_Session.remove();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值