首先,这听起来像是一个重复的问题,但我没有得到我期待的解决方案,所以我发布了这个新问题?几天前我开始学习 hibernate 。我坚持这一件事:
这是我的代码:
public static void open_connection()
sessionfactory=new Configuration().configure().buildSessionFactory();
Listsession = sessionfactory.openSession();
}
public List select(String qry)
{
open_connection();
Listsession.beginTransaction();
query =Listsession.createQuery(qry);
list=query.list();
Listsession.getTransaction().commit();
Listsession.close();
sessionfactory.close();
}
Q1. 我在查询运行时关闭了 sessionfactory。这是一个好方法吗?我想在我们不需要它时关闭数据库连接,就像我们在 JDBC 中所做的那样(我的老师教我的)。
问题 2. 当用户从我的站点注销时,我是否应该关闭连接?
Q3. 请问sessionfactory.close();也销毁我的 session 变量(session.setattribute(“用户”,你);)。
Q4. Listsession.getTransaction().commit();也关闭交易?
我想知道这一点,因为很多时候我在 netbeans 上运行我的项目时,我得到空指针异常,但是当我在线运行同一个项目时,我没有得到空指针异常,我认为这是因为每次运行时都会调用 openconnection我的项目。 很抱歉发布了这么多问题,因为我无法得到我正在寻找的确切答案。
最佳答案
1.你应该关闭Session
而不是SessionFactory
2.你已经在执行查询后关闭了Session
,那么当从站点logout
时再次关闭的点在哪里?
3.HttpSession
与Hibernate中的Session不同。 HttpSession
用于存储用于维护用户请求顺序的属性。但是 Hibernate 中的 Session
只能与 Database 交互。因此,在 Hibernate 中关闭 Session
不会反射(reflect)在 HttpSession
上。
4.如果你使用的是openSession()
,你应该手动关闭session。但是如果你使用的是getCurrentSession()
,你就不用管它了,一旦事务提交, session 将自动关闭。
希望对你有帮助,
关于java - 什么时候关闭 hibernate 中的数据库连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24906834/