我正在使用每个具体类策略的表
Vehicle
TransportationVehicle extends Vehicle
PassengerVehicle extends Vehicle.
现在创建了三个表
Vehicle
TransportationVehicle
PassengerVehicle
但是当我使用查询数据库时
from Vehicle v
Hibernate 对所有三个表发出联合查询,为什么会这样?我只是要求车辆。
我正在使用每个具体类策略的表
Vehicle
TransportationVehicle extends Vehicle
PassengerVehicle extends Vehicle.
现在创建了三个表
Vehicle
TransportationVehicle
PassengerVehicle
但是当我使用查询数据库时
from Vehicle v
Hibernate 对所有三个表发出联合查询,为什么会这样?我只是要求车辆。
您可以尝试 @Inheritance(strategy=InheritanceType.JOINED) 注释
因为TransportationVehicle
和PassengerVehicl
也是Vehicule
。这就是hibernate中多态查询的工作方式。如果你想要一个PassengerVehicl,你将只有PassengerVehicl。
如果您只想获得车辆,则需要更改模型。
TransportationVehicle 和PassengerVehicle 是Vehicle 的子类。Hibernate 将返回 Vehicle 的所有实例(TransportationVehicle 和 PassengerVehicle 也是 Vehicle 的实例)。如果您只想选择 Vehicle 您可以创建层次结构:
AbstractVehicle
Vehicle extends AbstractVehicle
TransportationVehicle extends AbstractVehicle
PassengerVehicle extends AbstractVehicle
AbstractVehicle 应该用@MappedSuperclass 注释。
这是期望的行为,也是大多数 ORM 查询语言的核心特性。
要将结果限制为一类实体:
"from Vehicle v where v.class = " + Vehicle.class.getName();