我有一个 JPA 对象,它具有这样的多对多关系:
@Entity
public class Role {
//...
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(
name="RolePrivilege",
joinColumns=
@JoinColumn(name="role", referencedColumnName="ID"),
inverseJoinColumns=
@JoinColumn(name="privilege", referencedColumnName="ID")
)
private Set<Privilege> privs;
}
RolePrivilege 没有 JPA 对象,因此我不确定如何编写 JPQL 查询来删除角色对象的 privs 字段中的条目。例如,我试过这个,但它不起作用。它抱怨 Role.privs 没有被映射。
DELETE FROM Role.privs p WHERE p.id=:privId
我不确定还能尝试什么。我当然可以只编写一个从连接表 RolePrivilege 中删除的本机查询。但是,我担心这样做会与本机查询不会更新的本地缓存对象进行不良交互。
甚至可以编写 JPQL 来从这样的连接表中删除条目吗?如果不是,我可以加载所有角色对象并从每个角色的 privs 集合中删除条目,然后保留每个角色。但是,如果一个简单的 JPQL 查询可以一次完成所有操作,那么这样做似乎很愚蠢。