我有一个包含在@Transactional
中的Spring集成测试。 Hibernate / JPA数据库接口扩展JpaRepository
并对其函数使用PESSIMISTIC_READ
和PESSIMISTIC_WRITE
锁。在测试中,将发生以下步骤:
@Entity
个对象。@Entity
更新并写入另一个@Service
级事务中的repo。@Entity
对象并与第一个对象进行比较。问题是在第2步写入后,第一个@Entity
对象实际上已在本地更新。在比较步骤3中的@Entity
个对象时,两者都是相等的,而不是预期的“之前和之后”差异。
本地@Entity
对象的这种“同步”是如何发生的,这是预期的行为吗?
答案 0 :(得分:1)
在使用正确的术语进行一些研究之后(例如,在持久化上下文中进行缓存),它似乎是预期的,如下所述: https://vladmihalcea.com/how-does-hibernate-store-second-level-cache-entries/
可行的解决方法是手动刷新实体或将2个读取分成不同的事务,如下所述: Force hibernate to read database and not returning cached entity