【问题标题】:JPA Criteria Query - How to join on only a subclass of the association entity type?JPA Criteria Query - 如何仅加入关联实体类型的子类?
【发布时间】:2017-07-07 19:11:19
【问题描述】:

我正在使用 Spring、Hibernate 和 JPA Criteria API。

假设我有一个 Vehicle 类层次结构和一个 Tire 类。每辆车可以有多个轮胎。

  • 车辆 -- 油罐车、摩托车

  • 轮胎

我想查询容量超过 100 加仑的 Tankers 上的小轮胎。 但是轮胎的车辆属性是车辆类型。只有一个车辆子类(油轮)具有“容量”属性。 我如何告诉标准 api 仅在 Tankers 上加入?

谢谢!

我确定以前有人问过/回答过这个问题,但我认为我缺少正确的术语来进行成功的搜索。

【问题讨论】:

  • 您好,如果回答对您有帮助,别忘了接受/点赞。
  • 对不起。在我发布这个之后,我找到了一个解决方法并且真的很忙。直到现在才回过神来。我实际上是在寻找使用标准查询 API 的解决方案。但是,您的解决方案向我展示了我是如何忽略显而易见的并且可以应用相同的概念来使其工作的。谢谢。

标签: spring-data hibernate-criteria jpa-criteria


【解决方案1】:

试试这个:

@Entity
public class Vehicle {
    @OneToMany
    private Set<Tire> tires;
}

@Entity
public class Tank extends Vehicle {
    private int gallons;
}

@Entity
public class Motorcycle extends Vehicle {
}

@Entity
public class Tire {
}

public interface VehicleRepo extends JpaRepository<Vehicle, Long> {

    @Query("select v.tires from Vehicle v where v.gallons > ?1")
    List<Tire> findByGallonsIsGreaterThan(int gallons);
}

如果您需要在 JPQL 查询中仅选择子类类型,您可以使用这种方法:

select v from Vehicle v where type(v) = Tank
select v from Vehicle v where v.class = Tank

Exampletest

【讨论】:

    猜你喜欢
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 2018-07-04
    • 2013-11-09
    • 2012-09-07
    • 2015-02-27
    • 2016-12-17
    相关资源
    最近更新 更多