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

时间:2017-07-07 19:11:19

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

我使用的是Spring,Hibernate和JPA Criteria API。

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

  • 车辆 - 油轮,摩托车

  • 轮胎

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

谢谢!

我确定之前已经提出过这个问题,但我认为我错过了正确的术语来成功搜索。

1 个答案:

答案 0 :(得分:0)

试试这个:

@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