2011-09-06 87 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'今天被評爲。 –