Grails中object.get()vs object.read()的好处

时间:2012-07-09 18:13:51

标签: grails gorm read-write

我正在浏览一些Grails文档,并在Grails中找到this一点关于read()方法的内容。如果我正确理解了这一点,您可以从数据库中提取对象的“只读”版本,该版本仅保存在显式save()调用中。在我看来,只要你有一个你不希望被改变的对象,就应该使用read()调用。

但为什么你不总是使用read()电话?由于无论如何{@ 1}}对象都会被更改为读/写权限,因此只读取对象而不是获取对象会不会更安全?

1 个答案:

答案 0 :(得分:19)

你可能是正确的 - 在大多数情况下它都是等同的。但是Hibernate不要求你调用save(),因为它在刷新期间进行脏检查,并且由于Grails使用“在视图中打开会话”拦截器,所以在每个请求结束时总会有一个刷新。这使得在get()检索到的实例中进行更改的人员感到惊讶,这些实例在呈现视图时只是暂时的,但无论如何在没有save()调用的情况下仍然保持更改。在这种情况下,read()会更有意义。

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