0

各 interfaceCode の最新バージョンのみを使用して InterfaceVersion を選択する基準または HQL を作成する必要があります。バージョンは、majorVersion.minorVersion.editVersion で構成されます。

例:

InterfaceVersion テーブル:

id | interface_code_id | major_version | minor_version | edit_version
---|-------------------|---------------|---------------|-------------
 1 |                 1 |             1 |             1 |            6
 2 |                 1 |             1 |             5 |            0
 3 |                 2 |             1 |             0 |            0
 4 |                 2 |             0 |             1 |            0
 5 |                 2 |             2 |             0 |            1
 6 |                 2 |             1 |             3 |            6

期待される結果は次のようになります。

InterfaceVersions instances with ids [2, 5]

私はこのGORMドメインクラスを持っています(簡略化):

InterfaceCode{
    int id
    String code

    static hasMany = [ versionList: InterfaceVersion]
}

InterfaceVersion{
    int id
    InterfaceCode interfaceCode
    int majorVersion
    int minorVersion
    int editVersion

    static belongsTo = [ InterfaceCode ]

    static constraints = {
        interfaceCode(unique:['majorVersion','minorVersion','editVersion'])
    }
}

これまでのところ、私はこのSQLを思いつくことができました:

SELECT t1.*
FROM Interface_Version  t1
  Left Outer Join Interface_Version  T2
    On (T1.Interface_Code_Id = T2.Interface_Code_Id And 
      (T1.Major_Version < T2.Major_Version Or 
      (T1.Major_Version = T2.Major_Version And T1.Minor_Version < T2.Minor_Version) Or 
      (T1.Major_Version = T2.Major_Version And T1.Minor_Version = T2.Minor_Version And T1.Edit_Version < T2.Edit_Version ) )
      )
WHERE t2.id IS NULL

この sql を hql または critearia に変換するか、より良いものを考え出してください。

4

0 に答える 0