2

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

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

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

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

谢谢!

我敢肯定这已经被问过/回答过,但我认为我错过了成功搜索的正确术语。

4

1 回答 1

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

示例测试

于 2017-07-07T20:47:48.957 回答