2012-11-07 88 views
2

我想「在」子句中使用一個分離標準作爲子查詢,但不知它不工作:使用的DetachedCriteria的子查詢條款

def trades = new DetachedCriteria(Trade).build { 
      projections { property "tradeNbr" } 
} 

def activities = Activiies.withCriteria { 
      'in' "tradeNumber", trades 
} 

這是我遇到的錯誤:

2012-11-07 01:07:09,088 [http-bio-8081-exec-1] TRACE sql.BasicBinder - f228562 - binding parameter [1] as [INTEGER] - [email protected] 



grails.gorm.DetachedCriteria cannot be cast to java.lang.Integer. Stacktrace follows: 
java.lang.ClassCastException: grails.gorm.DetachedCriteria cannot be cast to java.lang.Integer 
      at grails.orm.HibernateCriteriaBuilder.invokeMethod(HibernateCriteriaBuilder.java:1587) 
      at org.grails.datastore.gorm.GormStaticApi.withCriteria(GormStaticApi.groovy:282) 
+0

detachedCriteria的文檔說,list()是一個默認的方法,但顯然它沒有這樣做。我期待「印刷行業」獲得交易,但它會打印對象參考。難道我做錯了什麼? – rks

回答

2

我相信list只有在這個意義上默認,你可以用它在each構建像

trades.each { 
    println it 
} 

而這是因爲它實現了Iterable。否則,您實際上必須使用trades.list()運行查詢。僅使用trades就是指DetachedCriteria對象。

def activities = Activities.withCriteria { 
    'in'("tradeNumber", trades.list()) 
} 
+0

trades.list()應該可以工作,但我希望查詢解析器能夠解析活動中的交易標準,並且此時在默認情況下擴展活動和通話列表中的查詢。 – rks