首先,这可能听起来像是一个重复的问题,但我没有得到期望的解决方案,所以我发布了这个新问题。我几天前开始学习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();
}
问题1. 当查询运行时,我关闭了sessionfactory。这是一个好的方法吗?我希望在不需要数据库连接时关闭它,就像在JDBC中一样(我的老师教过我这样做)。
问题2. 用户从我的网站注销时,我应该关闭连接吗?
问题3. sessionfactory.close(); 也会销毁我的会话变量(session.setattribute("user",ur);)吗?
问题4. Listsession.getTransaction().commit(); 是否也会关闭事务?
我想知道这个问题是因为很多时候我在netbeans上运行我的项目时会得到空指针异常,但当我在线上运行同一项目时却不会出现空指针异常,我认为这是因为每次运行我的项目时都调用了openconnection。对于发布这么多问题,我很抱歉,因为我找不到我所寻找的确切答案。
long-lived-sessions
和short-lived-sessions
是编写 Hibernate 代码的模式。实际上,你必须决定是使用短生命周期会话还是长生命周期会话。在这种情况下,你的代码非常糟糕,因为在select()
外部,n-m 关系以及延迟查询都无法工作,因为会话、连接或事务已经消失了。 - Grim