Hibernate查询从子类中获取数据

时间:2015-09-08 14:01:11

标签: java hibernate table-per-class

我正在使用Table per concrete class strategy

Vehicle
TransportationVehicle extends Vehicle
PassengerVehicle extends Vehicle.

现在创建了三个表

Vehicle
TransportationVehicle
PassengerVehicle

但是当我使用

查询数据库时
from Vehicle v

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

4 个答案:

答案 0 :(得分:0)

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

AbstractVehicle
Vehicle extends AbstractVehicle
TransportationVehicle extends AbstractVehicle
PassengerVehicle extends AbstractVehicle

AbstractVehicle应该使用@MappedSuperclass注释。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

因为TransportationVehiclePassengerVehicl也是Vehicule。这是如何在hibernate中进行多态查询的。如果您想要PassengerVehicl,您将只拥有PassengerVehicl。

如果您只想获得一个Vehicule,则需要更改模型。

答案 3 :(得分:0)

这是所需的行为,是大多数ORM查询语言的核心功能。

将结果限制为一类实体:

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