Hibernate 查询与扩展域类的关系

Hibernate 查询与扩展域类的关系,hibernate,grails,gorm,Hibernate,Grails,Gorm,我有几个域类: class Dealer { hasMany = [vehicles: Vehicle] } class Vehicle { belongsTo = [dealer: Dealer] } class Car extends Vehicle { } class Bus extends Vehicle { belongsTo = [liabilityInsurance: LiabilityInsurance] } class LiabilityInsu

我有几个域类:

class Dealer {
    hasMany = [vehicles: Vehicle]
}

class Vehicle {
    belongsTo = [dealer: Dealer]
}

class Car extends Vehicle {
}

class Bus extends Vehicle {
    belongsTo = [liabilityInsurance: LiabilityInsurance]
}

class LiabilityInsurance {
    hasMany = [buses: Bus]
}
我想做一个条件查询(或HQL查询),它将查找所有的
经销商
,他们已经销售了一辆
车辆
(一辆
公交车
),该车具有
责任保险

我遇到了麻烦,因为我无法自上而下地遍历关系:

Dealer.withCriteria {
   vehicle {
      eq 'liabilityInsurance', foo  // error, vehicle doesn't have liabilityInsurance
   }
}
你知道怎么做吗

编辑:


我不熟悉Grails语法,所以我将提供一个纯JPA的解决方案;如果您觉得它有用,可以将其转换为Grails:

select distinct d from Dealer d join d.vehicles v
where v in (select b from Bus b where b.liabilityInsurance = foo)
如果您有更多的车辆具有责任保险(而不是
总线
),您最好从扩展
车辆
并定义
责任保险
的基类扩展这些车辆。然后在子句中引用
中的基类。如果这不适合您的设计,您可以为每个此类实体重复
中的

...
or v in (select a from Airplane a where a.liabilityInsurance = foo)
但是,如果只有责任保险的
公交车
,那么最简单的方法是:

select distinct b.dealer from Bus b where b.liabilityInsurance = foo

String query=“从车辆v选择新地图(d为经销商,v为车辆)左加入经销商d,其中d.vehicles=v”def result=dealer.executeQuery(查询,[max:20,offset:0])@vahid该查询根本没有提到责任保险,但这是我的搜索条件。。。