hibernate - 查询与扩展域类的关系

标签 hibernate grails gorm

我有一些 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查询),该查询将查找所有出售了DealerVehicle(一个Bus)的LiabilityInsurance

我遇到了麻烦,因为我无法自上而下地遍历这些关系:
Dealer.withCriteria {
   vehicle {
      eq 'liabilityInsurance', foo  // error, vehicle doesn't have liabilityInsurance
   }
}

任何想法如何做到这一点?

编辑:

提到了类似的问题herehere

最佳答案

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

相关文章:

grails - 我可以使用UIPerformance grails插件并将静态资源托管在另一个域中吗?

grails - Grails-找不到数据库反向工程师插件

grails - 如何在Grails/GORM映射中要求某些列的值?

grails - 当一个的键是另一个的ID时,如何从旧数据库中将一个映射到一个关系

grails - GORM minSize约束被忽略

java - 使用 envers 列出每个实体的最新版本

java - 无法使用 hibernate 更新 MySQL 中的行

java - Spring Boot 错误 404 未找到 Hibernate

java - 在运行时更改 hibernate 索引位置(lucene)时,索引未存储在新位置

mongodb - Grails Gorm + mongoDb在保存期间获取OptimisticLockingException