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

标签 hibernate grails gorm

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

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

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

最佳答案

经过进一步调查后,只读行为将挂接到实例所在的 session 。

这等效于使对象“读取”的内容:

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

“读取”的不幸局限性是它不会影响关系。因此,如果让“ parent ”阅读,“ child ”对象仍将自动保存并被独立对待。从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. 

关于hibernate - grails/GORM实例使用get vs read读取的域之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52880275/

相关文章:

java - hibernate datetime 转换为 Date 抛出异常

spring - Grails - 覆盖 resources.groovy 中的 bean 属性值

grails - Grails会删除其他域对象引用的记录吗?

sql-server - 此后,在SQL Server分析 session 中,将已编译的准备好的语句与exec进行协调

java - 我在一个实体中有多个 OneToMany 映射。即使我没有请求该对象,Hibernate 也会加载第一个对象。这是预期的行为吗?

java - 以编程方式在 JpaProperties 中添加 hibernate 拦截器 - Spring

Grails 中的 Ajax 调用导致 "Could not find matching constructor"

maven - 将依赖项的快照版本导入Maven存储库

grails - 启动grails应用程序时出现架构导出错误

java - PostgreSQL + Hibernate + C3P0 = FATAL : sorry, 已经有太多客户端