我正在使用Grails,我有以下域类:
class Pack {
String code
Date publishedDate
//several other properties (including collections hasMany)....
def isPublished() {
return publishedDate != null
}
def publish() {
publishedDate = new Date()
}
def canEdit() {
return !isPublished()
}
}
要销售Pack我首先需要发布它,然后使用publish方法来发布Pack。
发布后,无法更改Pack(即发布后,Pack必须是不可变的实例)。
我的问题是:
或
另一种选择是使用canEdit()方法结合Hibernate事件(beforeUpdate和beforeDelete)。如果canEdit()== false,那么我可以在beforeDelete或beforeUpdate中抛出RuntimeException。是一个很好的解决方案吗?
Obs。:我认为Ruby中的冻结方法完全符合我的需要。 (http://rubylearning.com/satishtalim/mutable_and_immutable_objects.html)
答案 0 :(得分:1)
您可以使用Pack.read( id )
获取
指定id处于只读状态的域类的实例。如果具有指定标识的行不存在,则返回null。
请参阅http://grails.org/doc/latest/ref/Domain%20Classes/read.html