Запрос 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.

Если вы хотите получить только автомобиль, вам нужно сменить модель.

Другие вопросы по тегам