问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

hibernate session的问题

发布网友 发布时间:2022-04-11 23:47

我来回答

3个回答

热心网友 时间:2022-04-12 01:16

这个么,你这个是hibernate与spring整合开发,让DAO继承了spring的HibernateDaoSupport,这样的确能够提高开发效率 ,但是不够灵活,而且使DAO层依赖于spring的api,增加了耦合。但是不考虑复用的话还可以。
下面一个一个的分析:

this.getsession实际上是调用了父类中的方法获得session。使用spring管理hibernate的SessionFactory的时候,这个方法会从session池中拿出一session.这样做有可能有问题,就是超session池连接数的时候,spring无法自动的关闭session。 不推荐使用

this.getHibernateTemplate().getSessionFactory().getCurrentSession()从spring管理的sessionFactory中创建一个绑定线程的session.spring会根据该线程的执行情况来自动判断是关闭session还是延迟关闭。这样做可以避免手动的管理实务,同时一个线程最多开启和关闭一次session又可以提高程序的性能。 极力推荐使用这种方法

this.getHibernateTemplate().getSessionFactory().OpenSession。这种方法从spring管理的sessionFactory中创建一个session,此session不是线程绑定的。当执行完一个实务的时候自动关闭session.这种方法不用手动管理实务,但是同一个线程多次的开启和关闭session,浪费系统资源和影响执行效率,正常情况下还是不要用了。

楼主 你就不能自己动手做一下试验啊。算了 哥给你代劳吧。
这里我们讨论者三个session的关闭问题。
本来发截图了 但是百度审核啊审核 郁闷

这个是测试的层 log是在servi层构造好的然后传入,都学到spring了也没必要把所有代码都贴出来才能看懂吧

package com.test.spring.;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.test.spring.model.Log;

public class LogDaoMysqlImpl extends HibernateDaoSupport implements LogDao {

public void addLog(Log log) {
//this.getSession().save(log);
//getHibernateTemplate().save(log);
this.getHibernateTemplate().getSessionFactory().openSession().save(log);

}

}

执行结果如下,log4j产生的日志被忽略

org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint: execution(addUser)
check security
org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint: execution(addUser)
check security
org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint: execution(addLog)
check security
org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint: execution(addLog)
check security
Hibernate: insert into log (type, time) values (?, ?)
Sat Jan 12 00:10:00 CST 2002

没有进行session的关闭(不用spring也不用关闭session,session的关闭交给SessionFactory自动处理,但是使用spring的this.getSession没有使用spring创建SessionFactory而是直接从spring的session缓冲池拿到session,spring的session缓冲池中一般默认生成10session,前面也说了,可能是其他线程使用完没有关闭的,所以要显示的调用close,释放资源,因为取出来就放不回去了。所以要手动关闭,而且他两种获取的方法使用了spring提供的SessionFactory,spring会自动的处理没有必要进行手动关闭),就连事物的开启与关闭也不用。
这就是使用spring的好处,把切面上零散的代买同意进行处理。
楼主以后再有什么不明白的,大可以自己动手试试,不然容易把我们的错误观点变成你的。试个八百十次 自己就什么都明白了,而且比别人说的印象更加深刻。

热心网友 时间:2022-04-12 02:34

1.this.getSession() 是org.springframework.orm.hibernate3.support.HibernateDaoSupport 中的一个方法,它可以从当前事务或者一个新的事务获得一个hibernate session,需要程序维护session(手动关闭session)
2.this.getHibernateTemplate().getSessionFactory().getCurrentSession()//openSession()则从spring中获取session
getCurrentSession()创建的Session会绑定到当前的线程中去、而采用OpenSession()则不会。 采用getCurrentSession()创建的Session在commit或rollback后会自动关闭,采用OpenSession()必须手动关闭
3.通过new HibernateCallback(){XXX}获得的session是当前线程中的session

参考资料:还有其他问题的话,给我发百度消息

热心网友 时间:2022-04-12 04:09

this.getsession是获得一个session对象,
this.getHibernateTemplate().getSessionFactory().getCurrentSession()是通过session工厂获得一个session对象
this.getHibernateTemplate().getSessionFactory().OpenSession这个就是通过session工厂开启一个session对象
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
凉拌黑木耳:泡发后需要用沸水焯多长时间啊? 请问怎样截图视频某段然后制作GIF动画呢???另外截图后,每个帧怎样做相... 手把手教你用 Chrome 制作 GIF 截图 四川达州中考录取分数线,? 宣汉昆池职业中学2024年分数线是多少 大竹县石子职业中学2024年分数线是多少 韦博开心豆少儿英语教学如何创新并保持学习动力与成果? 有什么好看的日漫?【 不要太老的 人物都很漂漂 】 谢谢na~ 推荐好看的日漫 类型无所谓,老一点也可以,新出的也可以。但绝对不... 兔属相和龙属相合不合 兔属相和什么相冲相克 Hibernate的Session hibernate中session与JSP中session的区别是什么? Hibernate中的session和httpsession什么区别?? hibernate怎么判断session是否关闭 hibernate session 什么时候关闭 hibernate的session不手动关闭会不会自动关闭 hibernate为什么要有session 在hibernate中,session的作用是什么,怎么用呢,谢谢各位大虾了。 hibernate中的session指的是什么 hibernate中的session指的是什么?可否将单个的session在多个线程间进行共享 Hibernate中Session什么意思? sap hana 收费吗 《saphana实战》pdf下载在线阅读全文,求百度网盘云资源 hana的应用软件 sap hana 为什么抛弃oracle sap hana插上32路cpu,性能有多大飞跃 SAP HANA插上32路CPU,性能多大飞跃 各位SAP HANA是什么意思 sap hana是属于哪一种数据库技术方案 公司原来上的SAP ERP,最近又要引入HANA,有谁对SAP HANA比较了解,能否介绍一下? Hibernate中的session.clear(),save(),和flush()的理解? Hibernate的Session的lock方法和merge方法有什么区别 java hibernate 注解 怎么获取session 如何查看hibernate session是否关闭 hiredis 怎么创建多个数据库 hiredis支持lua调用吗 hiredis 能用在3.0版本 redis集群吗 windows hiredis能访问linux的redis吗 关系型数据库中存储过程的用户接口有哪些 我国企业供应链管理信息系统的现状 想兼职做一些企业报表, 数据库开发, 企业ERP接口扩展方面的工作, 好找吗? +什么是反向键索引+反向键索引原理+创建反向键索引 如何建立高效的反向索引 在什么样的环境下需要建立反向键索引 SQLSERVER2000中能不能建立反向索引 SQL如何建立倒序索引 搜索引擎如何建立索引 什么是正向索引? mongodb 分页查询 需要自动增加ID吗 如何设置zookeeper的JVM内存