Ale*_*hel 3 grails grails-orm grails-domain-class grails-2.0
我domainObj1 == domainObj2
在Grails中做的是通过ID比较的对象吗?如果没有,他们如何比较?
首先,您需要了解GORM/Grails在执行时不会做任何特殊操作equals()
.除非您equals()
在域类上实现自己的类,否则它将默认为Java/Groovy实现.默认情况下,变量必须指向同一个实例.
现在,Hibernate让人感到有些困惑.Hibernate使用身份映射(第一级缓存); 当你从GORM中获取相同的域实例时,Hibernate实际上会第二次从缓存中返回相同的实例.因此,使两个变量指向同一个实例并显示为相等.
例如:
def something = Something.get(1)
def somethingElse = Something.get(1)
assert (something == somethingElse) // true
something.name = 'I changed this'
assert (something == somethingElse) // still true
something.id = 123 // no idea why you would EVER do this
assert (something == somethingElse) // still true
assert (something.id == somethingElse.id) // true, since it's the same instance!
assert (something.name == somethingElse.name) // true, since it's the same
Run Code Online (Sandbox Code Playgroud)
即使对实例进行了更改
归档时间: |
|
查看次数: |
752 次 |
最近记录: |