2010-01-31 59 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 
    ... 
} 

基本上我想更新特定网站上的特定用户的用户名和用户返回Ô bject。我所知道的网站和新的用户名,所以我试图用一个标准生成器来查找相应的连接功能:

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 2010-02-01 13:01:21

相关问题