Допустим, у меня есть следующие отношения один-ко-многим:
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-запрос?