我有几个域类:
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
知道怎么做吗?
编辑:
答案 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