【问题标题】:Version grails domain class by DateTimeDateTime 的版本 grails 域类
【发布时间】:2011-02-20 17:21:33
【问题描述】:

我想通过 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的等价物

【问题讨论】:

    标签: grails versioning grails-orm grails-domain-class


    【解决方案1】:
    • 只需使用new Page() 创建新版本,而不是使用get() - 将插入新记录。

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

    【讨论】:

    • 谢谢维克多!我不知道隐式时间戳功能,这看起来是个不错的选择。我可以在没有显式属性的情况下查询 dateCreated,例如 Page.findByPageId(pageId, [sort: 'dateCreated', order: 'desc', max: 1])?
    • 当然是普通字段。顺便说一句,使用grails console 或这个:grails.org/plugin/console - 它允许您在运行时环境中测试代码。这会让您马上回答此类问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多