查询与扩展域类的关系

时间:2015-07-02 11:07:40

标签: 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 LiabilityInsurance {
    hasMany = [buses: Bus]
}

我想制作一个条件查询(或一个HQL),它会查找已售出Dealer(a Vehicle)的所有Bus来{ {1}}。

我遇到了麻烦,因为我无法自上而下地追踪这种关系:

LiabilityInsurance

知道怎么做吗?

编辑:

提到类似的问题herehere

1 个答案:

答案 0 :(得分:0)

我不熟悉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)

如果您有更多具有责任保险的工具(Bus除外),您最好从扩展Vehicle并定义liabilityInsurance的基类扩展它们。然后,您将在in子句中引用基类。如果这不适合您的设计,您可以为每个此类实体重复in子句:

...
or v in (select a from Airplane a where a.liabilityInsurance = foo)

但是,如果它只是带有责任保险的Bus,那么最简单的方法是:

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