0

次のように、DateTime で grails ドメイン クラスをバージョン管理したいと思います。

  • 各プライマリ ID + DateTime プロパティにより、新しい DB 行が生成されます (つまり、バージョンごとに新しい DB 行)
  • DateTime 値を指定しなくても、最新バージョンを見つけることができます

現在、grails に関する私の知識は少し限られているため、これを達成する方法がわかりません。

例として、次のドメイン クラスを検討してください。

import org.joda.time.DateTime

class Page {
    String pageId
    DateTime theVersion
    String content

    static constraints = {
        pageId(nullable:false, blank:false, unique:true, matches:"[a-zA-Z\\._-]+")
        content(nullable:false, blank:false)
    }

    static mapping = {
        content(type:"text")
    }
}


  • バージョンごとに新しい DB 行が挿入されるようにするには、どのような変更が必要ですか?

    pageId+theVersion が一意になるように何らかの制約が必要であると想定していますが、これを GORM DSL で表現する方法がわかりません。

  • 関連する DateTime 値を知らずに最新バージョンを取得するにはどうすればよいですか?

    私は次のようなものを想定して
    Page.findByPageIdAndTheVersionLessThanEquals('uniquePageId', new DateTime())

    います。これにより、1つだけでなく多くのオブジェクトが見つかると思います。に相当するものも表現できるようにしたいORDER BY theVersion DESC LIMIT 0,1

4

1 に答える 1

3
  • new Page()ではなく を使用して新しいバージョンを作成するだけget()です。新しいレコードが挿入されます。

一意性を保証するには、次の制約を設定します。 theVersion(unique: 'pageId')

于 2011-02-20T18:03:44.913 に答える