0

次の1対多の関係があるとしましょう:

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 に答える