我无法理解为什么JPA delete
不工作。这是我的父实体:
public class RoleEntity {
//...other attributes like name etc.
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
@JoinColumn(name = "role_id", referencedColumnName = "id", nullable = false, insertable = false, updatable = false)
private Set<RoleExtEntity> extensions;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "file_id", referencedColumnName = "id", nullable = false)
private FileEntity fileEntity;
}
RoleRepository
:
@Repository
public interface RoleRepository extends JpaRepository<RoleEntity, Long> {
@Transactional
int deleteByFileEntityAndName(FileEntity fileEntity, String roleName);
}
我试图使用FileEntity
和RoleName
属性删除RoleEntity
。delete
查询返回val = 1
,但是当我再次执行findBy
时,它给了我记录而不是null
(因为我认为应该删除记录,父级和子级都应该删除)。
FileEntity fileEntity = fileRepository.findByFolderId(id);
RoleEntity roleToBeDeleted = roleRepository.findByFileEntityAndName(fileEntity, roleName);
int val = roleRepository.deleteByFileEntityAndName(fileEntity, roleName);
RoleEntity doesroleExistEntity = roleRepository.findByFileEntityAndName(fileEntity, roleName);
我已经尝试了这个平台上提到的各种解决方案,比如使用:
orphanRemoval = true
@Transactional
注释flush()
CascadeType.ALL
然而,它们似乎不起作用。有人能告诉我我在这里做错了什么吗?谢谢!
更新:问题是我从代码中的持久性服务调用了一个错误的方法。该方法是一个readOnlyTransaction()
,它不允许我做删除,所以我不得不使用另一个方法withTransaction()
来解决我的问题。
调用I think service方法时记录其他数据库查询?请调用jpa的delete方法。
JPA Method roleRepository.findByFileEntityAndName(fileEntity, roleName);
返回一些东西,比如show check.