我正在使用Table per concrete class strategy
Vehicle
TransportationVehicle extends Vehicle
PassengerVehicle extends Vehicle.
现在创建了三个表
Vehicle
TransportationVehicle
PassengerVehicle
但是当我使用
查询数据库时from Vehicle v
Hibernate为所有三个表发出联合查询,为什么会这样?我只是要求车辆。
答案 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)
因为TransportationVehicle
和PassengerVehicl
也是Vehicule
。这是如何在hibernate中进行多态查询的。如果您想要PassengerVehicl,您将只拥有PassengerVehicl。
如果您只想获得一个Vehicule,则需要更改模型。
答案 3 :(得分:0)
这是所需的行为,是大多数ORM查询语言的核心功能。
将结果限制为一类实体:
"from Vehicle v where v.class = " + Vehicle.class.getName();