2011-09-06 42 views
0

我有一个包含1到多关系的域类。一个CreditProvider可以有很多Rate s。 我想选择今天没有被评为标准查询的所有CreditProvider(或其他如果不可能以这种方式),并且我被卡住了。Grails - 标准,独家选择

这里是获取今天评为所有CreditProviders查询:

def criteria = CreditProvider.createCriteria() 
def forgottenCreditProvidersToday = criteria.list { 
       rates { 
         between('dateCreated', dateTodayAtMidnight, dateTodayAndNow) 
       } 
      } 
} 

我怎么能选择对方,也就是今天尚未评估是那样的CreditProviders? 还有,为什么我不设法预先抓取率是这样的:

fetchMode("rates", FM.EAGER) 

非常感谢您的帮助。


编辑: Provisory溶液:

def criteria = CreditProvider.createCriteria() 

     def creditProvidersRatedToday = criteria.list { 
      rates { 
        gt('dateCreated', dateTodayAtMidnight) 
     } 
    order "originalName", "asc" 
} 
def creditProviders = CreditProvider.findAll() 

creditProviders.removeAll(creditProvidersRatedToday)

我愿意接受任何更多的优雅的解决方案:)

回答

1

在生成的SQL,这将需要子查询像

select * from credit_provider 
inner join rates on rates.credit_provider_id = credit_provider.id 
where not exists 
    (select id from rates where dateCreated between ? and ?) 

Grails的标准不支持子查询。虽然,HQL does support subqueries - 您可以将其转换为HQL。

-2

相反通常是通过“不”来实现,例如

def criteria = CreditProvider.createCriteria() 
def forgottenCreditProvidersToday = criteria.list { 
    rates { 
     not { 
      between('dateCreated', dateTodayAtMidnight, dateTodayAndNow) 
     } 
    } 
} 

}

+0

错 - 由于CreditProvider有很多'Rate's,可能会有'Rate's超出范围,虽然'CreditProvider'今天被评为。 –