首先,它可能听起来像一个重复的问题,但我没有得到解决方案我期待所以我发布这个新问题?几天前我已经开始学习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中一样(我老师教我这个。)
Q2。当用户从我的网站退出时,我应该关闭连接吗?
Q3。会sessionfactory.close();还会破坏我的会话变量(session.setattribute(" user",ur);)。
Q4。 Listsession.getTransaction()。commit();还关闭交易?
我想知道这一点,因为很多次我在netbeans上运行我的项目我得到空指针异常,但是当我在线运行同一个项目时,我没有得到空指针异常,我认为这是因为每次都调用openconnection我运行我的项目。 很抱歉发布了这么多问题,因为我无法得到我想要的确切答案。
答案 0 :(得分:4)
1.您应该关闭Session
而不是SessionFactory
2.执行查询后,您已经关闭了Session
,那么从网站logout
开始关闭的重点是什么?
3。HttpSession
与 Hibernate 中的Session不同。 HttpSession
用于存储用于维护用户请求序列的属性。但 Hibernate 中的Session
仅与数据库进行交互。因此,在 Hibernate 中关闭Session
并不会反映在HttpSession
上
4.如果您使用openSession()
,则应手动关闭会话。但如果您使用getCurrentSession()
,则无需烦恼,一旦提交了事务,会话将自动关闭。
希望它有所帮助,