Предложение «With» не работает над родительскими свойствами - условия соединения hql - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть следующая модель:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...