【发布时间】:2011-05-01 17:51:29
【问题描述】:
我是hibernate的新手,看了hibernate api和教程后,似乎会话在不使用时应该关闭。
像这样:
Session sess=getSession();
Transcration tx=sess.beginTranscration();
//do something using teh session
sess.save(obj);
tx.commit();
sess.close;
在独立应用程序中使用它时我毫无疑问。 但是我不确定在网络应用中使用时。
比如我有一个servlet:TestServlet来接收来自客户端的参数,然后我调用一个Manager根据参数查询一些东西,就像这样:
class TestServlet{
doGet(HttpServletRequset,httpServletResponse){
String para1=request.getParam...();
String para2=.....
new Manager().query(para1,para2);
}
}
class Manager{
public String query(String pa1,String pa2){
Session=....// get the session
//do query using para1 and 1
session.close() //Here, I wonder if I should close it.
}
}
是否应该在查询方法中关闭会话?
因为有人告诉我hibernate中的会话就像jdbc中的连接。那么如此频繁地打开和关闭它是正确的方法吗?
顺便说一句,每次都需要 tx.commit() 吗?
还有关于在 servlet 中使用 session 的线程问题是什么,因为我看到 session 在 api 中不是线程安全的。
【问题讨论】: