我是JPA和Hibernate的新手。我昨晚测试了它的事务管理,注意到了一些东西。我能够持久化实体,即使我在调用save方法后启动了事务,而且如果我不提交事务,它也不会持久化。我对hibernate事务的工作流程非常困惑。下面是代码片段:
Session session = sessionFactory.openSession();
transaction = session.beginTransaction();
firstUser = createUser("aaa@aa.com", "a", "yyy", true);
session.save(firstUser);
session.beginTransaction().commit();
我希望它不会被保存或抛出异常,因为我在开始事务之前保存了条目。
1条答案
按热度按时间o2g1uqev1#
我希望它不会被保存或抛出异常,因为我在开始事务之前保存了条目。
您通过第一次调用
beginTransaction
启动了一个新事务。然后保存了实体。然后你又调用了beginTransaction
。这将返回当前事务,而不启动新事务。然后您提交了事务,实体被持久化了。它的工作原理和Javadoc中描述的一样:https://docs. jboss. org/hibernate/orm/6.0/javadocs/org/hibernate/SharedSessionContract. html #beginTransaction()