2010-01-31 2 views
0

가 나는 다음과 같은 일대 다 관계가 있다고 가정하자 일대 기준 빌더와 :쿼리에서 다른 방법

Site has many Users 
User belongs to one Site 

나는했습니다 설정이

class Site { 
    static hasMany = [users:User] 
    ... 
} 
같은 관계를

class User { 
    static belongsTo = [site:Site] 
    int number 
    String username 
    ... 
} 

는 기본적으로 나는 특정 사이트의 특정 사용자에 대한 사용자 이름을 업데이트하고 사용자 O를 반환하려면 피하십시오. 내가 유사한 예외 얻을

class funcClass { 
    User func(Site site, int number, String newUserName) { 
     def results = User.createCriteria() 
     results.list = { 
      eq('number', number) 
      site { 
       idEq(site.id) 
      } 
     } 
     ... 
     def user = results[0] 
     ... 
     return user 
    } 
} 

:

groovy.lang.MissingMethodException: No signature of method: static com.myapp.Site.call() is application for arguemtns types: (funcClass$_closure) 

를이 가능한가요 나는 기준 빌더를 사용하여 해당 연결을 조회하려고하는 기능을 가지고, 그래서 나는 사이트 및 새로운 사용자 이름을 알고있다 Criteria Builder로? 다른 곳에서 쿼리를 수행 할 수 있다는 것을 알고 있습니다. 사이트에서 사용자로 기준을 작성하지만 사이트의 모든 사용자를 통해 반복해야만 업데이트하려는 번호와 일치하는 것을 찾을 수 있습니다. HQL 쿼리를 사용해야 만할까요?

답변

2

def criteria = User.createCriteria() 
def users = criteria.list { 
    eq('site', site) 
    eq('number', number) 
    maxResults(1) 
} 
def user = users[0] 

해야하지만 당신은 간단한 동적 파인더와 함께이 작업을 수행 할 수 있습니다

def user = User.findBySiteAndNumber(site, number) 
+0

우우합니다. 동적 파인더가 객체에서 작동하는지는 몰랐습니다. 나는 리팩터링 할 수있다. 감사! – TheBigS

관련 문제