【问题标题】:Hibernate query fetches data from subclassHibernate 查询从子类中获取数据
【发布时间】:2023-03-21 00:24:01
【问题描述】:
我根据具体的班级策略使用表格
Vehicle
TransportationVehicle extends Vehicle
PassengerVehicle extends Vehicle.
现在创建了三个表
Vehicle
TransportationVehicle
PassengerVehicle
但是当我使用查询数据库时
from Vehicle v
Hibernate 对所有三个表发出联合查询,为什么会这样?我只是要车辆。
【问题讨论】:
标签:
java
hibernate
table-per-class
【解决方案1】:
TransportationVehicle 和PassengerVehicle 是Vehicle 的子类。 Hibernate 将返回 Vehicle 的所有实例(TransportationVehicle 和 PassengerVehicle 也是 Vehicle 的实例)。如果您只想选择车辆,您可以创建层次结构:
AbstractVehicle
Vehicle extends AbstractVehicle
TransportationVehicle extends AbstractVehicle
PassengerVehicle extends AbstractVehicle
AbstractVehicle 应该用@MappedSuperclass 注释。
【解决方案2】:
你可以试试@Inheritance(strategy=InheritanceType.JOINED) 注解
【解决方案3】:
因为TransportationVehicle 和PassengerVehicl 也是Vehicule。这就是hibernate中多态查询的工作方式。如果您想要PassengerVehicl,您将只有PassengerVehicle。
如果您只想获得车辆,则需要更改模型。
【解决方案4】:
这是期望的行为,也是大多数 ORM 查询语言的核心特性。
将结果限制为一类实体:
"from Vehicle v where v.class = " + Vehicle.class.getName();