gpt4 book ai didi

java - Hibernate session 问题

转载 作者:太空宇宙 更新时间:2023-11-04 06:37:42 24 4
gpt4 key购买 nike

When you first attempt to use a session Hibernate will create one and attach it to your local thread. When you commit the transaction in the session Hibernate will automatically close the session meaning it can’t be reused. - got this quote from this site

这就是我的代码的样子,我可以在每次提交事务时关闭我的 hibernateSession 吗:

Session session = HibernateUtil.getSessionFactory().openSession();
session.setFlushMode(FlushMode.AUTO);
session.beginTransaction();
session.getTransaction().commit();
session.close();

我的所有代码都工作正常,但存在问题:例如,如果我将行添加到数据库中,保存成功,如果我在 1-10 秒后添加另一行。发生 Hibernate 异常,表示 session 已关闭。但如果我等待一分钟再添加一个,这种情况就不会发生。这在我的代码中是否有些错误,或者服务器的连接速度很慢(我确实有这个想法,因为我的 java servlet 代码的更新有时会延迟)?有什么想法吗?

最佳答案

只要您需要提交事务,您就打开 session ,这是一件好事,但是:

一般来说,hibernate 会为您管理所有 session 的关闭和打开,因此,如果您需要承担责任,则需要在 hibernate 配置文件中更改以下内容:hibernate.cfg.xml

属性名称: current_session_context_class
属性(property)值(value): 托管

要创建 session 并启动事务,您需要以下代码:

org.hibernate.classic.Session session = HibernateUtil.getSessionFactory().openSession();
session.setFlushMode(FlushMode.MANUAL);
ManagedSessionContext.bind(session);
session.beginTransaction();

要提交事务,请执行以下操作:

ManagedSessionContext.unbind(HibernateUtil.getSessionFactory()); 
session.flush();
session.getTransaction().commit();
session.close();

您可以 100% 确定,每当您提交时,您都会从线程中取消附加 session ,并且 gc 将处理它。

因此,每当您需要执行另一笔交易时,您都需要再次运行代码的第一部分。

关于java - Hibernate session 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25132024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com