问题:
使用hibernate 一般会使用到hibernate的延迟加载技术,但是我在第一次使用延迟加载的时候,发现报错,不能取出延迟集合中的值。当时只能不使用延迟加载。
原因:
在dao层把数据取出后,已关闭session,而处理延迟的集合是在业务逻辑层,在需要使用延迟的集合的时候,hibernate会去数据库取数据。但是现在session已经关闭,所以不能取出延迟的数据。
解决:
在后来研读hibernate相关书籍的时候,才发现在使用session的集中管理可以解决这一问题。集中管理方式,较多的为ThreadLoad模式,ThreadLoad会把session与当前线程绑定。在当前线程创建时,创建session。在当前线程结束时,关闭session。
在spring和hibernate共同使用的应用中,集中管理一般分为:1、在一次请求中打开一个session,2、在一次事物中打开一个session。
一、 在一次请求中打开一个session:是在一个http请求开始的时候创建一个sessio并绑定到ThreadLoad中,在这个请求返回之前一直保持session打开。从而使这个session在整个请求期间都可以使用。
在web.xml中添加
缺点:如果请求在某一节点被阻塞,在此期间session资源会一直占用而不释放掉,如果冰法较大,会造成系统宕机,如果某一步发生异常也会导致session没有正常关闭.
二、在一个事物中打开一个session:在开始一个事物之前创建session,并把session绑定到当前事物。当事物提交或者回滚时,就会释放当前相关的session,并关闭session。
使用该中session集中管理,需要在代码中实现。
两种那个更合适,需要自己取舍,在一个事物中打开一个session不会出现宕机,但是在一个请求中,可能会有多个事物,会多次连接数据库。
使用hibernate 一般会使用到hibernate的延迟加载技术,但是我在第一次使用延迟加载的时候,发现报错,不能取出延迟集合中的值。当时只能不使用延迟加载。
原因:
在dao层把数据取出后,已关闭session,而处理延迟的集合是在业务逻辑层,在需要使用延迟的集合的时候,hibernate会去数据库取数据。但是现在session已经关闭,所以不能取出延迟的数据。
解决:
在后来研读hibernate相关书籍的时候,才发现在使用session的集中管理可以解决这一问题。集中管理方式,较多的为ThreadLoad模式,ThreadLoad会把session与当前线程绑定。在当前线程创建时,创建session。在当前线程结束时,关闭session。
在spring和hibernate共同使用的应用中,集中管理一般分为:1、在一次请求中打开一个session,2、在一次事物中打开一个session。
一、 在一次请求中打开一个session:是在一个http请求开始的时候创建一个sessio并绑定到ThreadLoad中,在这个请求返回之前一直保持session打开。从而使这个session在整个请求期间都可以使用。
在web.xml中添加
<filter> <filter-name>hibernateFilter</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInviewFilter</filter-class> <init-param> <param-name>singleSession</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>hibernateFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
缺点:如果请求在某一节点被阻塞,在此期间session资源会一直占用而不释放掉,如果冰法较大,会造成系统宕机,如果某一步发生异常也会导致session没有正常关闭.
二、在一个事物中打开一个session:在开始一个事物之前创建session,并把session绑定到当前事物。当事物提交或者回滚时,就会释放当前相关的session,并关闭session。
使用该中session集中管理,需要在代码中实现。
Session session = getSession(); boolean existingTransaction = SessionFactoryUtils.isSessionTransactional(session,getSessionFactory()); FlushMode previousFlushMode = null; try{ ... return result; }cathch(Exception e){ .... }finally{ if(existingTransaction ){ disableFilters(session); if(previousFlushMode != null){ session.setFlushMode(previousFlushMode ); } }else{ SessionFactoryUtils.releaseSession(session,getSessionFactory()); } }
两种那个更合适,需要自己取舍,在一个事物中打开一个session不会出现宕机,但是在一个请求中,可能会有多个事物,会多次连接数据库。
发表评论
-
java中线程池
2016-06-26 16:31 364最近在看线程池的类容,自己动手实现一个 package ... -
jvm常用设置
2015-09-08 22:48 382在我们实际工作中,可能会经常对JVM有一些设置,但是很多设置都 ... -
WebService相关
2015-07-26 21:55 969之前由于工作需要 ... -
java RMI
2015-07-23 23:04 441JAVA RMI相关 分布 ... -
java jdbc 连接池
2015-07-21 00:18 480经常使用hibernate,在使用hibernate的时候经常 ... -
java 流传输压缩包
2015-07-14 23:14 577有的时候,页面上的下载文件是从后台使用流的形式下载来的,而不是 ... -
java 网络传输文件
2015-06-01 21:14 433package sterning; import java. ... -
java MD5加密
2015-03-30 14:41 297MD5是常用的加密算法,也经常用于校验信息完整,如文件的完整性 ... -
java 并发容器
2014-12-18 23:19 355在多线程的开发 ... -
java设计模式 之 builder模式
2014-12-11 22:19 413最近在看java设计模式,看到builder模式感觉十分不错, ... -
网上见到一篇compareTo文章较好,收藏之
2014-12-04 21:04 5421、compareTo(Object o)方法是jav ... -
Hibernate 和 spring 整合使用
2014-10-14 21:28 751在hibernate和spring时总结的一些知识,以供将来查 ... -
java写入txt文件
2014-05-22 23:10 1092File file = new File("d: ... -
POI读取excel
2014-05-22 23:05 899读取excel大概在java中有两种方法,选用apache的P ... -
定时器 quartz 和 spring
2014-04-17 23:30 480最近学习了一个quartz 和spring 的定时调度 这个 ... -
java 基于Struts2的 文件上传和下载
2014-04-03 22:56 531文件上传: 页面代码: <form action=' ... -
java IO
2014-03-23 23:23 410import java.io.BufferedReader ... -
自己写的一个JDBC工具类
2014-03-11 20:00 1167在最近的一段时间写毕业设计,由于本科阶段的毕业设计不是特别大的 ... -
JAVA EE里的一些配置文件
2014-03-11 19:56 556这段时间在写毕业设计,用到了SSH三大框架的一些技术,但是自己 ... -
java汉字数字转换成阿拉伯数字
2014-02-20 17:14 6554今天做一个日期转换的时候发现有些时间是用大写汉字写成的,需 ...
相关推荐
解压 打开index.html 即可浏览 hiernate5.2 .12api 。
Hiernate课件
学生成绩管理系统struts2+spring+hiernate+dwr+jquery UI全注解实现零配置项目
Flex整合Hiernate的BBS论坛系统 Flex整合Hiernate的BBS论坛系统 Flex整合Hiernate的BBS论坛系统Flex整合Hiernate的BBS论坛系统 Flex整合Hiernate的BBS论坛系统 Flex整合Hiernate的BBS论坛系统 Flex整合Hiernate的BBS...
挺全的hibernate所需的jar包,如需改进请提意见
hiernate 3.6.10 api chm
struts+hiernate+Spring+ajax(四)整合
spring2.5.6 +struts2.1.8+hiernate3.3.2(jar)
主要介绍了详解Spring+Hiernate整合,spring整合hibernate主要介绍以xml方式实现,有兴趣的可以了解一下。
NULL 博文链接:https://kaka100.iteye.com/blog/802094
xfire集成spring2.5+hibernate3.3,在网上找的东西,都是文档,所以想上传个实例工程,带jar包,说明文档,SQL脚本
利用Strtus2+hibernate+spring实现的用户管理小项目(内含mysql数据库脚本和所需的所有jar包),另外里面自己也做了一些封装,这个项目的说明可以参考我发表的博客"对SSH的一些认知
通过使用spring来实现登录效果踩踩踩踩踩踩踩踩踩踩踩
Hiernate里get和load的区别: 实体类: public class Book {//省略get和set方法 private Integer id; private String name; private String author; private Double price; } 测试类: @Test public void test01(){ /...
hibernate的常用的方法详解,可以更加清楚的了解hibernate的使用
Strtus2+spring+hibernateStrtus2+spring+hibernateStrtus2+spring+hibernate
包含全部源码,使用基于Struts和Hiernate的J2EE框架,JSP和Struts的标签实现显示层,ActionServlet控制业务逻辑,使用MyEclipse开发
jsf 1.2_04+hibernate 3.2.2.ga+spring 2.0.5,开发环境为jdk 1.5+myeclipse 6.0+mysql 5.0。
strut1.2+hiernate3.1+myeclipse
ssh集成项目,小项目,购物车,界面非常完美,ssh,hiernate,购物车