grails - Grails 中 object.get() 与 object.read() 的优势

标签 grails grails-orm read-write

我浏览了一些 Grails 文档,发现 this关于read() Grails 中的方法。如果我理解正确,您可以从数据库中提取对象的“只读”版本,该版本仅保存在显式 save() 上。称呼。在我看来,您应该使用 read()每当您有一个您不希望更改的对象时调用。

但是你为什么不总是使用 read()称呼?因为如果您 save(),该对象将被更改为读/写权限。无论如何,只读取对象而不是获取它不是更安全吗?

最佳答案

你可能是对的 - 在大多数情况下它是等价的。但是 Hibernate 不需要你调用 save()因为它在刷新期间进行脏检查,并且由于 Grails 使用“在 View 中打开 session ”拦截器,所以在每个请求结束时总会有一个刷新。这让在 get() 检索到的实例中进行更改的人感到惊讶。这意味着在渲染 View 时只是暂时的,但是在没有 save() 的情况下无论如何都会保留更改。称呼。 read()在那种情况下会更有意义。

一种性能优化是使用 http://grails.org/doc/latest/ref/Database%20Mapping/dynamicUpdate.html仅将更改的字段推送到数据库。默认是推送所有字段,无论它们是否已更改,此后无需为每次更新生成新的 SQL。如果您 read()一个实例 Hibernate 不保留原始数据,因此无法进行动态更新,因为无法知道哪些字段是脏的。

关于grails - Grails 中 object.get() 与 object.read() 的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11400716/

相关文章:

python - 向文件写入的数据多于读取的数据?

Java I/O 对路径中的每个文件进行操作

grails - 如何将我的computerId设置为主键?

hibernate - Grails/GORM,禁用一级缓存

java - 在 grails Controller 中识别 ajax 请求或浏览器请求

multithreading - chalice "Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)"

grails - 根据传递给 Controller ​​的参数动态创建查询

unit-testing - Grails单元测试模拟服务返回无效对象

grails - 如何在已部署的 Grails 应用程序中查找 GSP 文件的物理路径