【问题标题】:using detachedCriteria as a subquery for in clause使用 detachedCriteria 作为 in 子句的子查询
【发布时间】:2012-11-07 06:48:25
【问题描述】:

我正在尝试使用分离条件作为“in”子句的子查询,但不知何故它不起作用:

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] - grails.gorm.DetachedCriteria@57c4e7b2



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)

【问题讨论】:

  • detachedCriteria 的文档说 list() 是默认方法,但显然它没有这样做。我期待“打印交易”来获得交易,但它会打印对象引用。我做错了吗?

标签: grails subquery grails-orm detachedcriteria


【解决方案1】:

我相信list 只是一个默认值,因为您可以在each 结构中使用它

trades.each {
    println it
}

那是因为它实现了 Iterable。否则,您实际上必须使用trades.list() 运行查询。仅使用 trades 指的是 DetachedCriteria 对象。

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

【讨论】:

  • trades.list() 应该可以工作,但我希望查询解析器能够解析活动中的交易条件,然后默认扩展活动和调用列表中的查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 1970-01-01
  • 2015-04-02
  • 2010-10-23
相关资源
最近更新 更多