【问题标题】: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】:

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

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

        【讨论】:

          【解决方案4】:

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

          将结果限制为一类实体:

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

          【讨论】:

            猜你喜欢
            • 2012-06-16
            • 1970-01-01
            • 2023-02-15
            • 1970-01-01
            • 1970-01-01
            • 2015-04-25
            • 1970-01-01
            • 1970-01-01
            • 2015-05-06
            相关资源
            最近更新 更多