JPA - deleteBy查询不起作用,orphanRemoval=true不起作用



我无法理解为什么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);
}

我试图使用FileEntityRoleName属性删除RoleEntitydelete查询返回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.

最新更新