用Hibernate将Mutable转换为Immutable

时间:2013-07-10 23:22:32

标签: hibernate grails groovy immutability

我正在使用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必须是不可变的实例)。

我的问题是:

  • 如何使用Groovy在Immutable中转换Mutable对象?

  • 有没有办法从Hibernate中检索Immutable实例?

另一种选择是使用canEdit()方法结合Hibernate事件(beforeUpdate和beforeDelete)。如果canEdit()== false,那么我可以在beforeDelete或beforeUpdate中抛出RuntimeException。是一个很好的解决方案吗?

Obs。:我认为Ruby中的冻结方法完全符合我的需要。 (http://rubylearning.com/satishtalim/mutable_and_immutable_objects.html

1 个答案:

答案 0 :(得分:1)

您可以使用Pack.read( id )获取

  

指定id处于只读状态的域类的实例。如果具有指定标识的行不存在,则返回null。

请参阅http://grails.org/doc/latest/ref/Domain%20Classes/read.html