gpt4 book ai didi

java - 不提交 Hibernate Select 事务的后果

转载 作者:行者123 更新时间:2023-12-01 09:35:18 25 4
gpt4 key购买 nike

我是 Hibernate 的新手,并且继承了使用它的代码库。自动提交未定义,因此默认为 false。根据我提出的其他问题,答案表明最佳实践是划分代码,这样如果您开始事务,您应该始终 commit() 或 rollback() (感谢 Apostolos)。此代码库使用以下 Select 语句代码中的格式。我打算将任何新代码正确划分为 commit() 或 rollback(),但我只是好奇使用以下模型会产生什么后果。应用程序已经并继续正常工作,但我想了解是否有现有代码有任何问题。

this.session = HibernateUtil.getSessionFactory().getCurrentSession();    
Transaction tx = session.beginTransaction();
session.clear();
entityReturned = (MultipleKeyTable) session.get(MultipleKeyTable.class, entityId);
session.close();

最佳答案

Session.close() “通过释放 JDBC 连接并清理来结束 session ”( Hibernate SharedSessionContract docs )。这并不像我希望的那样明确,但是我能想到的“释放 JDBC 连接”的每一个合理解释都意味着以某种方式结束任何打开的事务。不过,仅仅关闭 session 而不是显式结束事务充其量是草率的。

无论如何,the Session docs推荐这个成语:

Session sess = factory.openSession();
Transaction tx = null;
try {
tx = sess.beginTransaction();
//do some work
...
tx.commit();
}
catch (Exception e) {
if (tx!=null) tx.rollback();
throw e;
}
finally {
sess.close();
}

如果需要,您可以在关闭 session 之前在同一 session 中运行多个事务。

关于java - 不提交 Hibernate Select 事务的后果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39027748/

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