JPA Criteria Query - 如何仅加入关联实体类型的子类?

JPA Criteria Query - How to join on only a subclass of the association entity type?

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

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

我想查询容量超过 100 加仑的油轮上的小轮胎。 但是 Tire 的车辆 属性 是 Vehicle 类型。只有一个载具 subclasses (Tanker) 有 "capacity" 属性。 我如何告诉条件 api 仅加入 Tankers?

谢谢!

我确定这在 asked/answered 之前出现过,但我认为我缺少正确的术语来进行成功搜索。

试试这个:

@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);
}

如果您只需要 select JPQL 查询中的子类类型,您可以使用这种方法:

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

Example and test.