2

简化的域模型:'Txn'(如在 Transaction 中)有许多 'TxnStatus'。TxnStatus 有一个日期时间

这是一个遗留映射,所以我不能更改数据库,Txn 上的映射:

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

我需要根据一些动态构建的条件来获取 Txns,目前使用 GORM 的“where”查询,效果很好;但我也只需要获取最新的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 ......任何帮助表示赞赏!

4

1 回答 1

1

前几天有个问题跟这个很像。似乎使用带有“max”子查询的 where 查询不适用于 ==

OP 能够让它与 < 一起工作,并以这种方式解决它。查看关于 where 查询的文档并没有帮助我弄清楚这一点。

这是一个非常疯狂的猜测 -

    Txn.where {
        txnStatus  {
          dateTime == property(dateTime).of { max(dateTime) }
        }
    }
于 2012-05-16T02:08:49.210 回答