根据这个答案https://stackoverflow.com/a/3588173/22172432,如果我们不提交或回滚事务,它将超时并回滚.那么,如果事务无论如何都要回滚,为什么还要回滚Catch块中的事务呢?我在一篇教程中读到"在Hibernate中,如果发生任何异常,最好回滚事务,这样资源就可以空闲了."但"资源"是什么意思?Hibernate是否使数据库中的物理事务保持打开状态?AFAIK不是,因为Hibernate有一个本地缓存(持久化上下文),并且首先它将任何更改写入其上下文,并且它只是一个与持久化上下文相关的事务的逻辑概念.
示例代码:
SessionFactory factory = new Configuration()
.configure("persistence.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
Session session = factory.getCurrentSession();
var transaction = session.beginTransaction();
try {
Employee person1 = session.get(Employee.class, 1L);
person1.setSalary(100000d);
if (true) {
throw new RuntimeException("error!");
}
transaction.commit();
} catch (Exception e) {
e.printStackTrace();
if (transaction.isActive())
transaction.rollback();
}