0

我想通过 DateTime 对 grails 域类进行版本控制,这样:

  • 每个主 ID + DateTime 属性产生一个新的数据库行(即每个版本一个新的数据库行)
  • 无需指定 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")
    }
}


  • 需要进行哪些更改才能确保每个版本都插入新的数据库行?

    我假设需要某种形式的约束,这样 pageId+theVersion 是唯一的,但我不知道如何在 GORM DSL 中表达这一点。

  • 在不知道相关 DateTime 值的情况下如何获得最新版本?

    我正在设想这样的事情:
    Page.findByPageIdAndTheVersionLessThanEquals('uniquePageId', new DateTime())

    我希望这会找到许多对象,而不仅仅是一个。我也希望能够表达相当于ORDER BY theVersion DESC LIMIT 0,1

4

1 回答 1

3
  • 只需创建新版本new Page(),而不是get()- 将插入新记录。

为了保证唯一性,放入约束: theVersion(unique: 'pageId')

于 2011-02-20T18:03:44.913 回答