2010-04-06 3 views
0

내 생각에 여러 위치에서 동적 메서드 (예 : Domain.findByName ("name"))를 사용해야하는 경우에 더 좋을까요? 여러 곳에서 동적 방법을 사용하는 대신 변수를 정의하고 참조하십시오. 분명히 알 수있는 대답 인 것 같지만, Grails가 캐시하지 않았는지 확인하고 싶습니다. 실제로 두 개의 DB 호출이 만들어졌습니다.여러 동적 메서드 호출 또는 Grails에서 변수 선언

답변

1

하여 액세스 할 수 있습니다 싶어, Grails는 전용 캐시 (요청 즉, 책을 "얻을"것 .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

이것은 정확한 해결책이며, 쿼리 및 응용 프로그램 사용 모델의 특성에 따라 최대 절전 모드 2 차 캐시가있는 경우 findByName ("name", [cache : true])은 동작을 실행하는 다른 클라이언트에게 도움이 될 수 있습니다 사용하도록 설정되었습니다. –