2012-11-07 78 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