Hinbernate操作数据库必须要开启事务, 但是在添加事务的时候遇到这个问题也是郁闷,
说Session被关闭了, 而这个Session又是必须的.
关键是我并没有关闭, 也找不到是哪里被关闭了的.
我把代码改成如下的样子, 则是可以运行的, 在执行之前,开启事务
* 查询用户
*
@param
uid
*
@return
@Override
public
User get(Integer uid) {
Transaction transaction
=
session.beginTransaction();
User user
=
null
;
try
{
user
= session.get(User.
class
,uid);
transaction.commit();
}
catch
(Exception e) {
e.printStackTrace();
transaction.rollback();
return
user;
原因分析:
每次调用了session之后, 在事务提交了以后就会把session关闭
这是因为Hibernate会维护这个Session, 在我提交事务的时候关闭Session
解决思路:
在代码执行之前, 开启Session, 添加如下代码:
@Override
public User get(Integer uid) {
Session session = HibernateUtil.getSession();
return session.get(User.class,uid);
}
问题解决!
附HibernateUtil的代码:
package com.bj186.crm.factory;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
* Hinbernate工具类
public class HibernateUtil {
private static SessionFactory sessionFactory;
private HibernateUtil() {
static {
//1. 声明配置对象,加载配置文件
Configuration configuration = new Configuration();
configuration.configure("hibernate.cfg.xml");
//2. 将配置文件告诉session工厂
sessionFactory = configuration.buildSessionFactory();
//获取session工厂
public static Session getSession() {
if(sessionFactory !=null ) {
return sessionFactory.getCurrentSession();
return null;
View Code