可以说我有以下一对多关系:
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
...
}
基本上,我想更新特定站点上特定用户的用户名并返回User对象。我知道站点和新的用户名,所以我有一个函数,尝试使用条件构建器查找相应的连接:
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查询?
最佳答案
它应该是
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)
关于hibernate - 使用Criteria Builder在一对多中查询另一种方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2173566/