zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    git提交代码到远程仓库github
    git报错记录
    关于VSCode的一些设置
    css之列表数据前加上小方框
    EChats使用报错之 《"TypeError: Cannot read property 'getAttribute' of undefined"》
    EChats使用之给图表加箭头以及渐变
    vue报错之(Do not use v-for index as key on <transition-group> children)
    在vue项目中使用mock模拟数据
    Vue项目中关于EChats的使用
    使用mock数据实现登录时的一次bug记录
  • 原文地址:https://www.cnblogs.com/zjulanjian/p/10940959.html
Copyright © 2011-2022 走看看