【发布时间】:2025-12-27 05:30:17
【问题描述】:
我有一个包含两个变量的 DomainClass,用户只能设置一个或另一个。他们没有设置的那个是由他们设置的那个 setter 中的一些代码决定的。因此,如果他们设置 A,B 会设置我想要的,如果他们设置 B,A 会设置我想要的。我遇到的问题是 .save() GORM 或 Hibernate 或其他东西也影响了设置器。
这是我添加到名为 l2getset 的新 grails 2.0 项目中的示例域:
package l2getset
class ExampleDomain {
String thisIsA
String thisIsB
void setThisIsA(String thisIsA){
println "Hitting A Setter"
this.thisIsA = thisIsA
this.thisIsB = 'user set A'
}
void setThisIsB(String thisIsB){
println "Hitting B Setter"
this.thisIsB = thisIsB
this.thisIsA = 'user set B'
}
static constraints = {
}
}
还有引导程序:
import l2getset.*
class BootStrap {
def init = { servletContext ->
def someExample = new ExampleDomain()
someExample.thisIsA = "Some String"
println "Some Example is: ${someExample.thisIsA} / ${someExample.thisIsB}"
someExample.save()
println "Some Example is: ${someExample.thisIsA} / ${someExample.thisIsB}"
}
def destroy = {
}
}
打印:
| Running Grails application
Hitting A Setter
Some Example is: Some String / user set A
Hitting A Setter
Hitting B Setter
Some Example is: user set B / user set A
| Server running. Browse to http://localhost:8080/l2getset
我如何区分当我“合法地”设置其中之一和 GORM/Hibernate/PleaseExplain 只是“玩弄我的设置器”之前,它会保留我的东西?
这个问题:Why are setters in Grails called twice on save? 似乎也涉及到这个问题,但我仍然想知道发生了什么以及如何解决我的问题。
【问题讨论】:
标签: hibernate grails save grails-orm setter