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

Mik*_*uto 25 grails read-write grails-orm

我撇了一些Grails文档,发现一点关于read()Grails的方法.如果我正确理解了这一点,您可以从数据库中提取一个只读对象的"只读"版本,该版本只会在显式save()调用中保存.在我看来,read()只要你有一个你不希望被改变的对象,就应该使用一个调用.

但为什么你不会总是使用read()电话?因为save()无论如何,对象将被更改为读/写权限,仅仅读取对象而不是获取它是不是更安全?

Bur*_*ith 20

你可能是对的 - 在大多数情况下它都是等同的.但是Hibernate不需要你调用,save()因为它在刷新期间进行脏检查,并且由于Grails使用"在视图中打开会话"拦截器,所以在每个请求结束时总会有一个刷新.令人惊讶的是,那些在其中检索的实例中进行更改的人get()只是在渲染视图时只是暂时的,但随后无需save()调用就会保持更改.read()在那种情况下会更有意义.

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