各 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 に変換するか、より良いものを考え出してください。