网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.计算机论坛收集(本站论坛精帖子.
.利用JavaBeans在应用程序中创建组.
.Enterprise JavaBeans导论4.
.用Java插件在浏览器中运行Java2 .
.通过Java Swing看透MVC设计模式.
.JavaMail发送附件的例子.
.使用JavaScript事件综合查询.
.我为什么要学习Hibernate?.
.如何在J2EE平台上实施应用性能的.
.JAVA链接DB2数据库的例子.
.在Jboss下Web Service调用EJB二(.
.isNaN 方法.
.使用simpson规则 完成积分运算.
.下面是工具类中的数据库访问类 M.
.使用Java Swing 创建一个XML编辑.
.Java核心代码例程之:Properties.
.Resin2.1.12的数据库连接池配置.
.采用POI和ANTLR提取WORD文档数据.
.Struts中不同的Action和ActionFo.
.理论与实践: 用弱引用堵住内.

Hibernate中的Session什么时候关闭?

发表日期:2008-1-5


hibernate是持久化对象的,那它里面的Session什么关闭?

问题补充:感觉你说的不怎么对

session似乎只在跟用户交互的时候才进行创建

等用户用完session以后,它就会随着用户销毁

以上是我对楼主补充问题的回答,顺带给楼下的初学者一点知识的补充。
***************************************

楼主只怕是初学Java,还没有搞清除HttpSession和Hibernate里的Session的区别。因为楼主说的东西是HttpSession的内容。
他们是完全不同的2个对象

javax.servlet.http.HttpSession是一个抽象接口
它的产生:J2EE的Web程序在运行的时候,会给每一个新的访问者建立一个HttpSession,这个Session是用户身份的唯一表示。注重,是容器(Tomcat,Resin)自动创建的。

用途:存放这个用户的一些经常被用到的信息,例如:用户名,权限。例如在购物车程序里,存放用户买的商品。

销毁:一定时间(跟容器有关)内,用户无任何动作,session自动销毁。

得到的方法:
HttpSession session = request.getSession();
常用方法setAttribute
session.setAttribute(key,value);
这样在另一个jsp或者Servlet里,可以用
session.getAttribute(key);得到value
类似一个Map

$$$$$$$$$$
org.hibernate.Session
是hibernate操作数据库的一个句柄对象。它跟上面那个Session唯一的相似处就是名字有点像,其他没任何一样的地方。
至于它的用法,相信我在下面已经说得很明白了。
不懂的加我QQ:178036872

***************************************

一般的Hibernate程序中,Session由用户手动获取,手动关闭。
正规项目中,在业务层获取Session
Session session = HibernateSessionFactory.openSession();

然后把此session传给dao层,将数据持久化或其他的操作。
一次业务逻辑可能调用多个dao方法,例如银行转帐,是一个先减后增的过程,所以会调用2个dao里的方法(甲帐户减,乙帐户增)。因此,可以利用业务层产生的同一个Session来做这件事

a1和a2代表帐户实体。
a1是甲的,a2是乙的。
a1.setAcount(a1.getAcount()-1000);
a2.setAcount(a2.getAcount()+1000);
dao.update(a1,session);
dao.update(a2,session);
Transaction tx = session.beginTransaction();
tx.commit();

最后在业务层,将session关闭
session.close();
或者调用HibernateSessionFactory.closeSession(session);

最好能加上异常捕捉,之类,如产生异常,即时回滚。保证操作不出意外。

try{
...
tx.commit();
}catch(Exception e){
tx.rollback();
}finally{
HibernateSessionFactory.closeSession(session);
}

默认session的时间为20分钟,假如想在这之前清除的话可以使用Session.Abandorn方法


上一篇:使用Java来监视系统进程的两个解决方案 人气:1050
下一篇:初学者想学Hibernate,初级基础教程 人气:821
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐