BluewineY 2016-09-23 05:53 采纳率: 50%
浏览 2186
已采纳

我的session.isOpen()报错,Hibernate的工厂类不会写

Hebernate 的SessionFactory怎么写,我的session.isOpen()报错,让buildPath图片说明
我的SessionFactory这样写的,写了两天了,也没写好,也不能完成基本的增删改查

 package com.aisino.hibernate.source;

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

public class HebernateUtil {
    private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); 

    //SessionFactory的对象
    private static SessionFactory sessionFactory=null;   
    //静态块
    static{
        //加载Hibernate配置文件
        Configuration cfg=new Configuration().configure();

        //sessionFactory=cfg.buildSessionFactory(new ServiceRegistry());

    }

    //获取Session
    public static Session getSession() throws HibernateException{
        Session session=threadLocal.get();
        if(session==null  || !session.isOpen()){
            rebuildSessionFactory();
        }
        session=(sessionFactory !=null)?sessionFactory.openSession():null;
        threadLocal.set(session);
    }

   //重建会话工厂
    private static void rebuildSessionFactory() {
        // TODO Auto-generated method stub

    }


    //关闭Session
    public static void closeSession() throws HibernateException { 
        Session session = threadLocal.get(); 
        threadLocal.set(null); 
        if (session != null) { 
            session.close(); 
            } 
        } 



}

  • 写回答

2条回答 默认 最新

  • AProMonkey 2016-09-23 06:44
    关注

    下面是我写的一个Hibernate工具类,用于生成session

    package com.util;
    
    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    
    /**
     * @Author: zsh
     * @Title: HibernateTool.java
     * @Description:建立一个工具类,主要是得到session及关闭session
     * @Date:2016年9月23日 上午14:25:22
     */
    public class HibernateTool {
    
        private static Configuration cfg = null;
        private static SessionFactory factory = null;
        private static Session session = null;
    
        // 静态代码块:优先于主方法,且只执行一次
        static {
            try {
                cfg = new Configuration().configure();
                factory = cfg.buildSessionFactory();
            } catch (Exception e) {
                System.out.println(e);
                e.printStackTrace();
            }
        }
    
        /**
         * 获得Session对象
         * 
         * @return
         */
        public static Session getSession() {
            session = factory.openSession();
            return session;
        }
    
        /**
         * 关闭session
         * 
         * @param session
         */
        public static void closeSession(Session session) {
            try {
                if (session.isOpen())
                    session.close();
            } catch (HibernateException e) {
                System.out.println(e);
                e.printStackTrace();
            }
        }
    }
    
    

    下面是hibernate的配置文件

     <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    
    <hibernate-configuration>
        <!-- session工厂,负责管理session -->
        <session-factory name="foo">
            <!-- 配置Oracle属性文件 -->
            <!-- Hibernate方言 -->
            <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
            <!-- 配置驱动 -->
            <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
            <!-- 配置URL -->
            <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
            <!-- 配置用户名 -->
            <property name="hibernate.connection.username">scott</property>
            <!-- 配置密码 -->
            <property name="hibernate.connection.password">root</property>
            <!-- 是否显示SQL语句 -->
            <property name="show_sql">true</property>
            <!-- 设置是否产生关系表 -->
            <property name="hibernate.hbm2ddl.auto">update</property>
            <!-- 格式化SQL语句 -->
            <property name="hibernate.format_sql">true</property>
    
            <!-- 如果数据库中没有该表,则自动创建表 -->
            <!-- hbm2ddl.auto有几种选项,update是当类的字段有更新时,运行程序后会自动更新对应的表 -->
            <!-- 
            <property name="hbm2ddl.auto">create</property>
            -->
            <!-- 配置映射文件 -->
            <!-- Users表的映射,测试数据库操作时需要使用 -->
            <mapping resource="com/hibernate/bean/Users.hbm.xml"/>
             <!-- 测试表的关系映射时需要使用 -->
            <mapping resource="com/hibernate/bean/DistrictDemo1.hbm.xml"/>
            <mapping resource="com/hibernate/bean/StreetDemo1.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)