2

単純化されたドメイン モデル: 'Txn' (トランザクションのように) hasMany 'TxnStatus'. TxnStatus には dateTime があります

これはレガシー マッピングであるため、Txn のマッピングである DB を変更することはできません。

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

現在GORMの「where」クエリを使用して、動的に構築された多数の基準に基づいてTxnを取得する必要がありますが、うまく機能します。しかし、最新の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は<で動作させることができ、そのように回避しました。クエリがこれを理解するのに役立たない場所に関するドキュメントを見る。

これは本当にワイルドな推測です-

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