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该查询根本没有提到责任保险,但这是我的搜索条件。。。