Grails的“最大”子查询和关联,只得到了一个最新的的hasMany(Grails “max” s

2019-09-17 05:57发布

简化的域模型:“事务处理”(如在交易)的hasMany“TxnStatus”。 TxnStatus有一个DATETIME

这是一个传统的映射,所以我不能改变DB,在事务处理的映射:

  static mapping = { 
    txnStatus column: 'MessageID', ignoreNotFound: true, fetch: 'join'
  }

我需要基于大量的动态构建的标准,目前使用GORM的“其中”查询来获取Txns,效果很好; 但我需要也只能得到最新 txnStatus。

尝试:

def query = Txn.where {
   txnStatus { dateTime == max(dateTime) }    
}

得出: java.lang.ClassCastException: org.hibernate.criterion.DetachedCriteria cannot be cast to java.util.Date

也尝试:

 def query = Txn.where {
       txnStatus.dateTime == max(txnStatus.dateTime)    
    }

这使:

Compilation Error: ... 
            Cannot use aggregate function max on expressions "txnStatus.dateTime"

在这个阶段,我想换到HQL的...任何帮助赞赏!

Answer 1:

有一个问题,一个几天前与此非常相似。 看来,使用其中一个“最大”子查询的查询不能很好地工作==

该任择议定书能够得到它一起工作<围绕它的工作的方式。 看着在哪里查询并没有帮助我弄清楚这一个的文档。

这是一个非常大胆猜测 -

    Txn.where {
        txnStatus  {
          dateTime == property(dateTime).of { max(dateTime) }
        }
    }


文章来源: Grails “max” subquery with an association, to get only the latest of a hasMany
标签: grails gorm