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
我正在使用 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