有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我试图构造一个JPQL查询,只选择组中不存在的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中相当容易:

从id不在的虚拟机中选择*(从组虚拟机中选择虚拟机id)

在JPQL中有这样做的方法吗


共 (1) 个答案

  1. # 1 楼答案

    用途不存在

    select vm from VM vm where not exists (select 1 from Group gr where vm member of gr.vms)
    

    不在也应该工作,但存在可能更快

    select vm from VM vm where vm not in (select gr.vms from Group gr)