Hibernate中的Session什么时分关闭?
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方法