grails - 在grails域类中重写getter以解决关系版本问题

标签 grails gorm

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

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

我想修改该结构,以允许在Phone类中设置删除标志,然后不必修改对getter的现有调用,以使电话获得未设置该delete标志的电话。

例如:
contact.phones

我在该网站上看到过一篇帖子,详细介绍了如何执行此操作。
StackOverflowPost

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

 Set<Phone> phones

 static hasMany = [phones: Phone]

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

}

最佳答案

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

​class Contact {

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

   return criteria
 }
}​

联系人类将返回添加了主要限制的条件,如果需要, call 者可以添加更多限制。
List phones = contact.phones().list()
or 
List phones = contact.phones().list {
  eq "country", "xxx"
}

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

关于grails - 在grails域类中重写getter以解决关系版本问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45523800/

相关文章:

mysql - Grails配置Mysql数据库报错

hibernate - 为什么 Grails 在域对象保存时不通知我错误?

spring - 如何让 SpringSecurity/Grails 与终止 SSL 的负载均衡器很好地配合

plugins - Grails Maven依赖解析

hibernate - 缺少数据源时,如何防止Bootstrap数据迁移运行

grails - Grails访问关系表

grails - 如何在Grails中检索LDAP数据?

grails - PagedResultList .size()和.getTotalCount()在grails gorm中返回不同的值

grails - 在createCriteria中使用配置驱动的逻辑

grails - Grails-为什么setDateCreated被多次调用?