我正在尝试构建JPQL查询以仅选择组中不存在的VM。我在VM和组之间有很多关系:
班组:
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name="group_vm",
joinColumns={@JoinColumn(name="group_id", referencedColumnName="id")},
inverseJoinColumns={@JoinColumn(name="vm_id", referencedColumnName="id")}
private Set<VM> vms;
在SQL中这很容易:
从vm中选择*,其中id不在(从group_vm中选择vm_id);
有没有办法在JPQL中执行此操作?
答案 0 :(得分:3)
使用NOT EXISTS
select vm from VM vm where not exists (select 1 from Group gr where vm member of gr.vms)
NOT IN也应该有效,但存在可能更快
select vm from VM vm where vm not in (select gr.vms from Group gr)