Java 不提交Hibernate Select事务的条件
我不熟悉Hibernate,并且继承了使用它的代码库。未定义自动提交,因此默认情况下为false。不过,根据我提出的其他问题,答案表明,最佳做法是对代码进行标定,以便在开始事务时始终应该提交()或回滚()(多亏了Apostolos)。 此代码库对Select语句使用以下代码中的格式。我打算将任何新代码正确地划分为commit()或rollback(),但我只是好奇使用下面的模型会产生什么后果。应用程序已经并将继续正常工作,但我想了解现有代码是否存在任何问题Java 不提交Hibernate Select事务的条件,java,hibernate,transactions,Java,Hibernate,Transactions,我不熟悉Hibernate,并且继承了使用它的代码库。未定义自动提交,因此默认情况下为false。不过,根据我提出的其他问题,答案表明,最佳做法是对代码进行标定,以便在开始事务时始终应该提交()或回滚()(多亏了Apostolos)。 此代码库对Select语句使用以下代码中的格式。我打算将任何新代码正确地划分为commit()或rollback(),但我只是好奇使用下面的模型会产生什么后果。应用程序已经并将继续正常工作,但我想了解现有代码是否存在任何问题 this.session = Hibe
this.session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
session.clear();
entityReturned = (MultipleKeyTable) session.get(MultipleKeyTable.class, entityId);
session.close();
Session.close()
“通过释放JDBC连接并清理来结束会话”()。这并不像我希望的那样明确,但我所能想到的每一个关于“释放JDBC连接”的合理解释都意味着以某种方式结束任何打开的事务。尽管如此,仅仅关闭会话而不是显式结束事务充其量也是草率的
值得一提的是,推荐以下成语:
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();
}
如果需要,您可以在关闭会话之前在同一会话中运行多个事务。我建议进行以下几项改进:
this.sessionFactory = HibernateUtil.getSessionFactory();
Session session = this.sessionFactory.getCurrentSession();
Transaction tx = session.beginTransaction();
entityReturned = (MultipleKeyTable) session.get(MultipleKeyTable.class, enti
transaction.commit();
session.close();
谢谢你的回答。在commit()之后调用close()将引发异常,尽管这是因为在commit()调用中会话正在关闭。