我有一些 Realm 类:
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
的Vehicle
(一个Bus
)的LiabilityInsurance
。我遇到了麻烦,因为我无法自上而下地遍历这些关系:
Dealer.withCriteria {
vehicle {
eq 'liabilityInsurance', foo // error, vehicle doesn't have liabilityInsurance
}
}
任何想法如何做到这一点?
编辑:
提到了类似的问题here和here。
最佳答案
我不熟悉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
关于hibernate - 查询与扩展域类的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31182876/