3

私は単純な Grails アプリケーションを持っています。私は以下のようなドメインを持っています

class Author implements Serializable {
   ....
   static hasMany = [
        book : Book 
   ]
}

class Book implements Serializable{

   Author author
   Genres genres
   static belongsTo = [author: Author , genre: Genres ]
   static mapping = {
    .....
       author lazy: false
   }
}

class Genres implements Serializable{

    String title

}

ここで、ジャンルのタイトルのリストを取得する必要があります。これらのジャンルのいずれかで少なくとも 1 冊の本を持っているすべての著者を取得する必要があります。Author クラスに名前付きクエリを記述する必要があります。次のクエリを試しました

hasGenre {cl ->
    'book.genre.title' in cl
}

そして、次のように文字列のリストを渡します

 Author.hasGenre(genereTitleStringArray)

しかし、これは機能していないようです。うまく機能する他のいくつかの簡単な名前付きクエリがあります。したがって、「hasGenere」を含めて検索すると、検索には影響しないようです。私は何を間違っていますか?私はこの分野にかなり慣れていない

前もって感謝します

4

2 に答える 2

1

list()メソッドを使用していますか? そうでない場合は、namedQuery がNamedCriteriaProxy.Classを返すため、それを使用して namedQuery からエンティティを取得する必要があります。

author = Author.hasGenre(genereTitleStringArray).list()

私にとって、そのようなコードはうまく機能しています。私の著者には次のものがあります。

static namedQueries = {
    hasGenre { cl->
        'book.genres.title' in cl
    }
}

同じように予約してください。ジャンルについては、依存関係を1対1で追加する必要があります(まだ追加していない場合):

 static belongsTo = [book: Book]

または1対多:

static hasMany= [book: Book]

私にとって、現在のコードはうまく機能しています。幸運を祈ります。

PS私はgrails 2.3.11を使用しています

于 2015-10-15T09:50:53.047 に答える
0

適切な構文は次のとおりです。

 static namedQueries = {
       hasGenre {genreName -> 
                book{
                   genres {  
                       eq 'title' genreName 
               } 
           }
       }
   }
于 2015-10-15T09:27:15.263 に答える