【发布时间】:2021-05-07 20:20:15
【问题描述】:
假设我想删除与实体 B 具有多对一关系的实体 A。 删除实体 A 后,如果这是与实体 B 相关的最后一个实体,我还想在同一事务中删除实体 B。 我对这些操作的实现如下所示:
@Transactional
fun delete(idEntityA: Long, idEntityB: Long) {
entityARepository.deleteById(idEntityA)
if (entityARepository.countDistinctByEntityBId(idEntityB) == 0L) {
entityBRepository.deleteById(idEntityB)
}
}
根据我对 Spring Data JPA(/Hibernate) 工作原理的理解,count 操作不应该考虑前面的 delete 操作,因为它还没有提交。 虽然如果我执行该方法,它已经考虑到实体A的未提交删除操作。 我现在的问题,因为我找不到合适的文档: 在从数据库读取数据时,Spring Data JPA 或 Hibernate 是否也会考虑来自同一事务的未提交操作?
我知道如果我在不同的事务中使用默认隔离模式执行计数查询,如果相应的事务还没有提交,它就不会知道删除操作。
提前致谢!
【问题讨论】:
标签: hibernate spring-data-jpa transactions