Session/EntityManager is closed


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

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM