我知道DomainClass.get()和DomainClass.read()之间的功能差异。属性更改后,“读取”会在会话刷新时停止从自动保存实例的休眠状态。
但是我找不到两个返回的实例之间的区别 改变行为。
Grails为域实例提供了一个属性“ instanceGormInstanceApi”,我认为该属性必须包含答案,但是到目前为止,我仍无法弄清楚该对象的区别。
答案 0 :(得分:0)
经过进一步调查,只读行为被挂接到实例所在的会话上。
这等效于使对象“读取”:
DomainClass.withSession{session->
session.setReadOnly(myInstance,true)
session.setFlushMode(FlushMode.MANUAL)//this isn't always necessary?
}
请参见https://github.com/grails/gorm-hibernate5/blob/master/grails-datastore-gorm-hibernate5/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernateUtil.java上GrailsHibernateUtils中的源代码方法setObjectToReadOnly
不幸的是,“阅读”的局限性是不影响人际关系。因此,如果让“父母”阅读,“孩子”对象仍将自动保存并被独立对待。从grails文档...
There is one exception to this though - any associated collections, for
example an Author's books collection, will participate in automatic
flushing and dirty detection.