我想通过DateTime对Grails域类进行版本化,以便:
我对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
答案 0 :(得分:3)
new Page()
创建新版本,而不是get()
- 将插入新记录。为了确保独特性,加入限制:
theVersion(unique: 'pageId')
Page.findByPageId(pageId, [sort: 'theVersion', order: 'desc', max: 1])
您可以使用Grails'dateCreated
implicit timestamping feature - it will even work with joda-time plugin。
OTOH,你为什么不利用Grails的内置version
字段?它为您提供了一些开箱即用的功能,并负责乐观锁定。