2010-04-06 66 views
0

在我看来,如果我有一种情况需要在多个地方使用动态方法(例如Domain.findByName(“name”)),它会更好吗定义一个变量并引用它,而不是在多个地方使用动态方法?我知道这似乎是一个明显的答案,但我只是想确保Grails不会缓存它或者什么,而且确实有两个数据库调用正在进行。多个动态方法调用或在Grails中声明变量

回答

1

访问它在默认情况下,Grails将只缓存“get”请求时(即图书.get(4)),如果你没有设置任何额外的缓存,你会为每个请求点击数据库(如你所见)。

有关更多详细信息,请参见the 'caching queries' section of the grails documentation

如果你只想调用一次(在视图中有意义,因为你希望它是一致的),我会在动作中执行查询并将其传入模型中,或者否则你也可以在视图中使用g:set来设置它(尽管这听起来像是更适合于控制器或服务)。

0

将域对象作为模型的一部分发送到视图会更好,而不是从视图中调用Domain.findByName("name")

因此,在你的控制器方法你想要

def myAction = { 
    def myObject = Domain.findByName("name") 
    // do other stuff 
    [myObject: myObject] 
} 

那么在你看来,你可以通过

${myObject.property} 
+0

这是正确的解决方案,根据查询和应用程序使用模型的性质,如果您有Hibernate二级缓存,则findByName(“name”,[cache:true])也可能有利于执行该操作的其他客户端启用。 – 2010-04-08 13:50:45