grails / GORM实例使用get vs read读取的域之间的差异

时间:2018-10-18 18:22:22

标签: hibernate grails gorm

我知道DomainClass.get()和DomainClass.read()之间的功能差异。属性更改后,“读取”会在会话刷新时停止从自动保存实例的休眠状态。

但是我找不到两个返回的实例之间的区别 改变行为。

Grails为域实例提供了一个属性“ instanceGormInstanceApi”,我认为该属性必须包含答案,但是到目前为止,我仍无法弄清楚该对象的区别。

1 个答案:

答案 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.