【发布时间】:2018-06-22 10:28:36
【问题描述】:
我有一个封装在 @Transactional 中的 Spring 集成测试。 Hibernate/JPA 数据库接口扩展JpaRepository 并在其功能上使用PESSIMISTIC_READ 和PESSIMISTIC_WRITE 锁。在测试中,会发生以下步骤:
- 从存储库中读取了一个
@Entity对象。 - 目标函数运行,它将相同的
@Entity更新并写入另一个@Service级别事务中的repo。 - 再次从存储库中读取
@Entity对象并与第一个对象进行比较。
问题是在第2步写完之后,第一个@Entity对象其实已经在本地更新了。在第 3 步中比较 @Entity 对象时,两者是相等的,而不是预期的“之前和之后”的差异。
本地@Entity 对象的这种“同步”是如何发生的,这是预期的行为吗?
【问题讨论】:
-
“另一个
@Service级事务”是什么意思?服务方法是否配置为需要新事务(即REQUIRES_NEW)? -
如果不是,那么您描述的用例很可能包含在 Spring 参考手册中的这个 note 中:docs.spring.io/spring/docs/current/spring-framework-reference/…
-
@SamBrannen 服务只使用默认的
@Transactional。感谢您的参考,我会研究一下我的测试
标签: spring hibernate jpa spring-test transactional