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
    ...
}

基本上我想更新特定站点上特定用户的用户名并返回用户对象。我知道站点和新用户名,所以我有一个函数尝试使用标准构建器查找相应的连接:

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 查询吗?

4

1 回答 1

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)
于 2010-02-01T05:34:32.667 回答