В Grails я пытаюсь найти экземпляр класса домена, который имеет точные записи в отношениях «один ко многим». Рассмотрим следующий пример:Соответствие hasMany детей с динамическими искателями Grails
class Author {
String name
List<Book> books
static hasMany = [books:Book]
}
class Book {
String title
static belongsTo = Author
}
Моя база данных, то появляется, как например:
author book
------------------------- ------------------------
| id | name | | id | title |
|----|------------------| ------------------------
| 1 | John Steinbeck | | 1 | Grapes of Wrath |
| 2 | Michael Crichton | | 2 | East of Eden |
------------------------- | 3 | Timeline |
| 4 | Jurassic Park |
------------------------
author_book
----------------------------------------
| author_books_id | book_id | book_idx |
----------------------------------------
| 1 | 1 | 0 | // John Steinbeck - Grapes of Wrath
| 1 | 2 | 1 | // John Steinbeck - East of Eden
| 2 | 3 | 0 | // Michael Crichton - Timeline
| 2 | 4 | 1 | // Michael Crichton - Jurassic Park
----------------------------------------
То, что я хотел бы быть в состоянии сделать, это использовать динамический искатель на автора. Я ищу точное соответствие на hasMany отношении, чтобы соответствовать такому поведению:
Author.findByBooks([1]) => null
Author.findByBooks([1, 2]) => author(id:1)
Author.findByBooks([1, 3]) => null
Author.findByBooks([3, 4]) => author(id:2)
Попытки это приводит к безобразной ошибке Hibernate:
hibernate.util.JDBCExceptionReporter No value specified for parameter 1.
Имеет кто-то динамические искатели работу с hasMany отношений классов домена? Что является самым «решением Grails-y» для получения желаемого поведения?
Это похоже на решение, которое я придумал, хотя я использовал raw SQL, а не HQL. Поддержка любого количества книг делает формирование запроса несколько более сложным, и дополнительная проверка на Author.books.size() может использоваться для обеспечения точного соответствия коллекции коллекций. Я был разочарован тем, что первый подход с двумя закрытиями книг не работает. Спасибо за разумный ответ, подтверждающий, что классы домена Grails и запросы критериев не соответствуют задаче. – timbonicus