Запрос Hibernate выбирает данные из подкласса
Я использую Таблицу для конкретной стратегии класса
Vehicle
TransportationVehicle extends Vehicle
PassengerVehicle extends Vehicle.
Теперь три таблицы созданы
Vehicle
TransportationVehicle
PassengerVehicle
но когда я запрашиваю базу данных, используя
from Vehicle v
Hibernate выдает объединение запросов для всех трех таблиц, почему это так? Я просто прошу автомобиль.
4 ответа
Вы можете попробовать аннотацию @Inheritance(стратегии =InheritanceType.JOINED)
Транспортное средство и Пассажирское транспортное средство являются подклассами транспортного средства. Hibernate вернет все экземпляры Vehicle(TransportationVehicle и PassengerVehicle также являются экземплярами Vehicle). Если вы хотите выбрать только Автомобиль, вы можете создать иерархию:
AbstractVehicle
Vehicle extends AbstractVehicle
TransportationVehicle extends AbstractVehicle
PassengerVehicle extends AbstractVehicle
AbstractVehicle должен быть аннотирован @MappedSuperclass.
Это желаемое поведение и является основной функцией большинства языков запросов ORM.
Чтобы ограничить результат одним классом объектов:
"from Vehicle v where v.class = " + Vehicle.class.getName();
Так как TransportationVehicle
а также PassengerVehicl
являются также Vehicule
, Вот так работают полиморфные запросы в спящем режиме. Если вы хотите PassengerVehicl, у вас будет только PassengerVehicl.
Если вы хотите получить только автомобиль, вам нужно сменить модель.