2014-11-03 57 views
2

我想构建一个JPQL查询来选择组中不存在的虚拟机。我有很多到虚拟机和组之间的多对多关系:JPQL查询多对多的关系,其中项目不存在连接表

类组:

@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相当简单:

SELECT * FROM VM其中id不是(从group_vm选择vm_id );

有没有办法在JPQL中做到这一点?

回答

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) 
+0

这工作。谢谢。 – clemep 2014-11-03 18:46:49