我有一个包含以下域类/关系的现有应用程序:
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 }
}
}
答案 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"
}
这为来电者提供了更大的灵活性。