覆盖grails域类中的getter以获取关系版本问题

时间:2017-08-05 15:55:19

标签: grails gorm

我有一个包含以下域类/关系的现有应用程序:

class Contact {
 static hasMany = [phones: Phone]
}

我想修改结构以允许在Phone类中设置删除标志,然后不必修改现有的手机getter调用来获取未设置删除标志的手机。

例如:

contact.phones

我在这个网站上看过一篇文章,详细说明了如何做到这一点。 StackOverflowPost

我尝试过这种方法(修改如下所示),但是GORM通过在不应该的时候递增版本来表现得很奇怪。我将点击联系人编辑页面,然后在提交表单后在服务器上进行版本比较时,与传递给edit.gsp的版本值相比,DB中的版本增加了大约5或6倍。我还将这个模式应用于另外两个关系,所以我认为它们也会导致版本增加。我将测试只有一个域关系修改,看看我是否可以找到一个模式。有没有人对正确的方法或如何避免版本递增有任何想法?

class Contact {

 Set<Phone> phones

 static hasMany = [phones: Phone]

 Set<Phone> getPhones() {
    phones.findAll { !it.deleted }
 }

}

1 个答案:

答案 0 :(得分:1)

不是你问题的直接答案,但是我在我的类中使用方法,而不是返回实际的域实例,返回调用者可以使用的分离条件,添加新限制,最后得到结果。

​class Contact {

  DetachedCriteria<Phone> phones() {
   def criteria = new DetachedCriteria(Phone).build {
     eq "deleted", false
     eq "contact", this
   }

   return criteria
 }
}​

联系人类将返回添加了主要限制的条件,如果必须,调用者可以添加更多限制。

List phones = contact.phones().list()
or 
List phones = contact.phones().list {
  eq "country", "xxx"
}

这为来电者提供了更大的灵活性。