У меня есть следующая модель:
abstract class Property {
Boolean active = true
}
class Building extends Property {
Integer id
String name
static hasMany = [floors: Floor]
}
class Floor extends Property {
Integer id
String name
static belongsTo = [building: Building]
}
Я хочу получить все здания с этажами или без ... Если я опрошу эти таблицы примерно так ...
session.executeQuery("select b.name, b.active, f.name, f.active from Building b left outer join b.floors f")
Я получу следующий запрос:
select
building0_.name as col_0_0_,
building0_1_.active as col_0_1_,
floors1_.name as col_1_0_,
floors1_1_.active as col_1_1_
from
building building0_
inner join
property building0_1_
on building0_.id=building0_1_.id
left outer join
floor floors1_
on building0_.id=floors1_.building_id
left outer join
property floors1_1_
on floors1_.id=floors1_1_.id
Теперь я хочу отфильтровать активные этажи, поэтому я сделал что-то вроде этого:
session.executeQuery("select b.name, f.name from Building b left outer join b.floors f with(f.active = true)")
Поскольку мне нужны все здания сили без этажей, если я добавлю этот фильтр в предложение where, я пропущу тех, кто имеет «active» в false, а также те здания, которые не имеют этажей.
Итак, я получаю следующую ошибку:
with clause can only reference columns in the driving table
Вопрос в том, как мне написать запрос для фильтрации через Property.active?
Я использую Grails версии 2.5.2 и hibernate4 версии 6.0.4