Hibernate中,将session绑定到线程时,在保存和查询数据的代码里,要正确的关闭session

比如有个保存的方法

// 保存

public void save(){

Transaction t = XXX

Session s = getSession.beginTransaction();

XXX

s.save();

XXX

// 关闭session

HibernateFactory.closeSession();

}

///查询

public void query(){

List list = query.list();

// 关闭session

HibernateFactory.closeSession();

}

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

如果保存的时候,不调用相应代码正确的关闭session,就可能出现的情况是:已经保存了数据,数据库也改了,但页面上时而又显示以前的数据。

时间: 2024-08-29 11:16:16

Hibernate中,将session绑定到线程时,在保存和查询数据的代码里,要正确的关闭session的相关文章

Hibernate-ORM:07.Hibernate中的参数绑定

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客会讲解Hibernate中的参数绑定,就是相当于sql语句中的where后面的条件 一,讲解概述: 1.通过下标的方式绑定参数 2.通过自定义参数名的方式绑定参数(多用于多表操作) 3.通过传入自定义对象的方式绑定参数(多用于单表操作) 4.通过类似智能标签的方式绑定参数(多用于带条件的多表操作) 二,通过下标的方式绑定参数 @Test /*通过下标的方式指定参数*/ public void t01

hibernate中写配置文件xxx.hbm.xml时那个成员变量的类型type如何写的问题

hibernate中的类型就是8种基本类型的包装类首字母变为小写,有integer,long,short,float,double,charchter,byte,boolean,当然还包括其他类型如:yes_no,true_false hibernate中的类型的作用是匹配数据库表中字段的类型和Java类中属性的类型不匹配的问题的一种解决方案,比如string完成从java.lang.String到VARCHAR的映射,所以在xxx.hbm.xml映射文件中我们写属性的类型时会写成如type="

Hibernate中Session与本地线程绑定

------------------siwuxie095 Hibernate 中 Session 与本地线程绑定 1.Session 类似于 JDBC 的连接 Connection 2.Session 对象是单线程对象,只能自己使用,不能共用 将 Session 与本地线程绑定,保证 Session 对象绝对是一个单线程对象 3.Hibernate 帮助我们实现了 Session 与本地线程绑定(底层是 ThreadLocal) 4.获取与本地线程绑定的 Session (1)在 Hiberna

hibernate中session的获取使用以及其他注意事项

hibernate中session的获取使用以及其他注意事项 前言:工作时,在同时使用Hibernate的getSession().getHibernateTemplate()获取Session后进行数据查询时不是出现了"session is close"异常就是出现其他异常问题,痛定思痛,决定收集并整理相关资料,方便今后的使用. 一.session的获取 在hibernate中的Session对象通过SessionFactory来管理,可以通过使用openSession ().get

hibernate中懒加载和急加载的区别,以及hibernate中get()方法和load()方法的区别

* 懒加载在加载一个实体的时候,不会马上从数据库中加载,即从数据库中加载到内存.而急加载在加载一个实体时,会立即从数据库中查询,与其关联的类也会被同时查询. 急加载就会很快,因为在第一次加载的时候,已经帮我们全部加载好了.而懒加载则会相对慢一些,因为在我门需要查询的时候,它才会执行sql操作. 所以懒加载的优点是占用内存小,执行速度慢;急加载是执行速度快,占用内存高 hibernate的get()he load()方法在执行的时候又很大的区别, 执行get()方法会把所有的基本数据全部加载, 而

Hibernate中的merge方法

Hibernate中有一个常见的错误: A different object with the same identifier value was already associated with the session 在一个session中存在两个不同的实体却有着相同的身份标签(主键)是会报错的,想要避免这种错误可以使用Hibernate中的merge方法. merge方法的作用: new一个对象并设置ID时,这个对象会被当作游离态处理,在使用merge时,如果在数据库中不能能找到这条记录,则

hibernate中缓存机制

1.一级缓存是针对session级别的,当这个session关闭后这个缓存就不存在了.2.二级缓存是SessionFactory级别的,二级缓存我们通常使用其他的一些开源组件,比如hibernate经常使用的就是ECache,这个缓存在整个应用服务器中都会有效的. 区别:两者的作用范围不同. 首先要明白缓存是干什么的,缓存就是要将一些经常使用的数据缓存到内存或者各种储存介质中,当再次使用时可以不用去数据库中查询,减少与数据库的交互,提高性能.再说明一级与二级缓存的作用:一级缓存是Session级

检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败

检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败 在项目中将数据导出为Excel格式时出现“检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005”,从网上搜了一下有如下解决方案: 1:在服务器上安装office的Excel软件. 2:在"开始"->"运行"中输入dcomcnf

转 检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败

检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败 在项目中将数据导出为Excel格式时出现“检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005”,从网上搜了一下有如下解决方案: 1:在服务器上安装office的Excel软件. 2:在"开始"->"运行"中输入dcomcnf