0

我正在使用每个具体类策略的表

Vehicle
TransportationVehicle extends Vehicle
PassengerVehicle extends Vehicle.

现在创建了三个表

Vehicle
TransportationVehicle
PassengerVehicle

但是当我使用查询数据库时

from Vehicle v

Hibernate 对所有三个表发出联合查询,为什么会这样?我只是要求车辆。

4

4 回答 4

0

您可以尝试 @Inheritance(strategy=InheritanceType.JOINED) 注释

于 2015-09-08T14:21:20.400 回答
0

因为TransportationVehiclePassengerVehicl也是Vehicule。这就是hibernate中多态查询的工作方式。如果你想要一个PassengerVehicl,你将只有PassengerVehicl。

如果您只想获得车辆,则需要更改模型。

于 2015-09-08T15:11:30.290 回答
0

TransportationVehicle 和PassengerVehicle 是Vehicle 的子类。Hibernate 将返回 Vehicle 的所有实例(TransportationVehicle 和 PassengerVehicle 也是 Vehicle 的实例)。如果您只想选择 Vehicle 您可以创建层次结构:

AbstractVehicle
Vehicle extends AbstractVehicle
TransportationVehicle extends AbstractVehicle
PassengerVehicle extends AbstractVehicle

AbstractVehicle 应该用@MappedSuperclass 注释。

于 2015-09-08T14:14:45.610 回答
0

这是期望的行为,也是大多数 ORM 查询语言的核心特性。

要将结果限制为一类实体:

"from Vehicle v where v.class = " + Vehicle.class.getName();

于 2015-09-08T18:45:05.333 回答