Spring 在同一事务中删除后的数据 JPA 计数
Spring Data JPA count after delete in same transaction
假设我想删除与实体 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) 工作原理的理解,计数操作不应考虑前面的删除操作,因为它尚未提交。
虽然如果我执行该方法,它已经考虑到实体 A 未提交的删除操作。
我现在的问题是,因为我找不到合适的文档:
在从数据库读取数据时,SpringData JPA 或 Hibernate 是否也会考虑来自同一事务的未提交操作?
我知道如果我使用默认隔离模式在不同的事务中执行计数查询,如果相应的事务尚未提交,它将不知道删除操作。
提前致谢!
默认情况下,JPA 实现会在执行查询之前刷新对数据库的更改。因此计数将考虑之前的删除。
如果您更改刷新模式,它仍然可能会再次在数据库中执行删除,从而导致计数观察到删除。
这几乎独立于位于 JPA 之上的 Spring Data JPA(参见 )。
假设我想删除与实体 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) 工作原理的理解,计数操作不应考虑前面的删除操作,因为它尚未提交。 虽然如果我执行该方法,它已经考虑到实体 A 未提交的删除操作。 我现在的问题是,因为我找不到合适的文档: 在从数据库读取数据时,SpringData JPA 或 Hibernate 是否也会考虑来自同一事务的未提交操作?
我知道如果我使用默认隔离模式在不同的事务中执行计数查询,如果相应的事务尚未提交,它将不知道删除操作。
提前致谢!
默认情况下,JPA 实现会在执行查询之前刷新对数据库的更改。因此计数将考虑之前的删除。
如果您更改刷新模式,它仍然可能会再次在数据库中执行删除,从而导致计数观察到删除。
这几乎独立于位于 JPA 之上的 Spring Data JPA(参见