带关联的Grails查询 - 在id不在另一个表中的表中查找所有内容

int*_*rgc 1 sql grails hibernate criteria

我需要能够在表中找到每个项的id不在关系映射表中的所有项.换句话说,我有一个表,每行有一个id.如果该ID位于地图表中,则它不应显示在我的列表中.

我正在考虑查询我的地图表中的所有id,然后转身并查询我的主表以排除任何具有该ID的项目...所以类似于:

选择*来自Main,其中id不在(从Map中选择main_id);

有没有一种好方法可以通过findBy方法或可能的条件构建器查询来使用grails?

Kal*_*see 6

如果您正在使用Hibernate,您应该能够使用HQL,使用a not in和子查询(这是一个示例页面):

from Main as main where main.id not in (select map.main_id from Map as map)
Run Code Online (Sandbox Code Playgroud)

基于此页面,我相信您需要在Main.findAll方法中执行此查询:

def results = Main.findAll("from Main as main where main.id not in (select map.main_id from Map as map)")
Run Code Online (Sandbox Code Playgroud)