JPQL查询连接表中不存在项的多对多关系

时间:2014-11-03 18:26:10

标签: java sql jpa many-to-many

我正在尝试构建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中执行此操作?

1 个答案:

答案 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)