2015-10-15 7 views
3

У меня есть простое приложение Grails. У меня есть домены, как показано нижеGrails domain Именованный запрос для списка строк

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 

} 

Теперь у меня есть требование, где у меня есть список названию жанров, мне нужно, чтобы получить все авторы, которые имеет по крайней мере одну книгу в одном из этих жанров. Мне нужно написать именованный запрос в классе Author. Я попробовал следующий запрос

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

И я передаю список строку следующим образом

Author.hasGenre(genereTitleStringArray) 

Но это не кажется, работает. У меня есть другие простые именованные запросы, которые отлично работают. Поэтому, когда я извлекаю, включая «hasGenere», это не влияет на поиск. Что я делаю не так? Я совсем новичок в этой области

Заранее спасибо

ответ

1

Вы использовали список() метод? если нет, то вы должны использовать его, чтобы получить объект из namedQuery, потому что namedQuery вернуться NamedCriteriaProxy.Class:

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

Для меня такой код работает хорошо, на мой Автор у меня есть:

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

Запишите то же самое. Как насчет жанров вы должны также добавить DEPENDENCY один-один (если у вас нет):

static belongsTo = [book: Book] 

или один ко многим:

static hasMany= [book: Book] 

Для меня текущий код работает хорошо, удачи.

P.S. Я использую grails 2.3.11

+0

Книга связана с генералами от Lazy Single-Ended Association. Это связано с тем, что я не хочу, чтобы книги извлекались при извлечении объекта Genere. Я использую Grails 2.2.4. Если я использую запрос 'Author.hasGenre (genereTitleStringArray) .list()', то все записи будут восстановлены. метод hasGenre, похоже, не влияет на извлечение – Visahan

+0

Я только что понял, что я определил метки как 'Set book' в Author, изменил его на' Set book' и он работает. Спасибо за помощь – Visahan

+0

Рад слышать, удачи, брата) –

0

Правильный синтаксис будет

static namedQueries = { 
     hasGenre {genreName -> 
       book{ 
        genres { 
         eq 'title' genreName 
       } 
      } 
     } 
    } 
+0

Я попытался использовать этот синтаксис, он не работал – Visahan

+0

Это было включено в домен автора? – Neoryder

+0

Да, в домене Автор, под static namedQueries = { – Visahan