У меня есть этот домен 3 класс:Grails подзапрос с «присоединиться» и «DetachedCriteria» держит неудачу
class Product {
String nr
String name
boolean allowBookingWithoutEvent
static hasMany = [events: Event]
}
class Event {
DateTime startDate
DateTime endDate
int userSize
static belongsTo = [product: Product]
}
class BookingProductEvent{
Product product
Event event
static belongsTo = [bookingItem: BookingItem]
}
То, что я пытаюсь сделать, это положить вместе критерий (я мог бы также изменить другой механизм запроса если это не сработает).
я некоторые ограничения на класс продукта, но я только то, что продукты, которые имеют наименьшее 1 событие, - это позже, то завтра, когда она позднее 17:00 сегодня - не достигли максимальных заказов для Событие
def userNow = curUser ? new DateTime(curUser.timeZone) : DateTime.now()
def today = userNow.withMillisOfDay(0)
def eventMinStartDate
if (userNow.isBefore(today.withHourOfDay(17).withMinuteOfHour(0).withSecondOfMinute(0)))
eventMinStartDate = today.plusDays(1)
else
eventMinStartDate = today.plusDays(2)
log.debug Product.createCriteria().get {
projections{
count("id")
}
if (search && !search?.equals("")) {
or {
like("nr", "%" + search + "%")
like("name", "%" + search + "%")
}
}
or {
eq("allowBookingWithoutEvent", true)
and {
eq("allowBookingWithoutEvent", false)
events {
gt("startDate", eventMinStartDate)
createAlias('id','event_id')
lt "userSize", new DetachedCriteria(BookingProductEvent).build {
projections {
count("id")
}
bookingItem {
isNotNull("booking")
}
event {
eq("id", "event_id")
}
}
}
}
}
}
Не удалось найти способ подключения к событию основного запроса с событием подзапроса (BookingProductEvent). Я предположил, что мне нужно создать псевдоним, имеющий ссылку внутри подзапроса. Но в любом случае, когда я вынимаю DetachedCriteria
, я не получаю ошибку. Я также упростил подзапрос, чтобы содержать только счет без псевдонима, но я продолжаю получать ошибку.
Но я получаю сообщение об ошибке:
2015-07-25 01:32:46,937 [http-bio-8080-exec-4] ERROR errors.GrailsExceptionResolver - MissingMethodException occurred when processing request: [GET] /test/shop/product
No signature of method: com.test.shop.ShopController.events() is applicable for argument types: (com.test.shop.ShopController$_products_closure10_closure50_closure52_closure53) values: [com.test.shop.S[email protected]11c9d26]
Благодарим вас за подсказку. Я рассматриваю ваше решение как план резервного копирования, так как он запускает SQL-запрос. Мой вопрос состоял в том, как решить эту проблему с помощью критериев и/или отдельных элементов – Bernhard