Проблема с загрузкой связанной сущности один-к-одному с HQL - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть 2 объекта: Автомобиль и Двигатель.Они имеют отношения один-к-одному, и срок службы двигателя зависит от срока службы транспортного средства, поэтому они отображаются на один ПК в базе данных.Когда я загружаю всю сущность Транспортного средства, у меня есть все основные свойства, включая загруженный Двигатель.Однако, когда я пытаюсь найти транспортное средство и загрузить только некоторые свойства, я получаю нулевые значения для свойства Engine.Вот отображение и запросы, которые я пробовал, и результат, который я хотел бы получить: (Извините, я удалил некоторый код, чтобы он был как можно более привязан и все еще понятен, некоторый код может выглядеть неправильно, но он находится в проекте)

Карта автомобиля:

<hibernate-mapping>
    <class name="Vehicle" table="VEHICLE" lazy="false">
        <id name="id" type="long" access="field">
            <!-- ordinary code, skip it -->
        </id>

        <discriminator column="VEHICLE_TYPE" type="string" />

        <property type="string" name="description" column="description" access="field" not-null="true" length="5000" />

        <one-to-one
                name="engine"
                fetch="join"
                access="field"
                entity-name="Engine"
                cascade="all"
        />          

        <subclass name="Car" discriminator-value="CAR"></subclass>
    </class>
</hibernate-mapping>

Карта двигателя:

<hibernate-mapping>
    <class name="Engine" table="ENGINE" lazy="false">
        <id name="id" column="vehicle_id" type="long" access="field">
            <generator class="foreign">
                <param name="property">vehicle</param>
            </generator>
        </id>

        <one-to-one
                name="vehicle"
                access="field"
                entity-name="Vehicle"
                constrained="true"
        />

        <property type="int" name="horsePower" column="horsePower" access="field" not-null="true" />
    </class>
</hibernate-mapping>

SELECT car.description FROM Car car -> Одно свойство со значением описания

SELECT car.description, car.engine FROM Car car -> Значение описания и одно нулевое свойство, являющееся двигателем.

SELECT car.description, car.engine.horsePower FROM Car car ->Значение описания и свойство horsePower для двигателя.

SELECT car.description, car.engine.horsePower FROM Car car LEFT JOIN car.engine carEngine -> Тот же результат, что и в прошлом.

ВЫБЕРИТЕ car.description, car.engine ОТ АВТОМОБИЛЯ car ВЛЕВО ПРИКЛАДИТЕ car.engine carEngine -> Опять у меня загружено свойство description и нулевое значение для двигателя.

Можно ли загрузить такmehow простые свойства от машины и всего двигателя вместе.Я хочу, чтобы в наборе результатов было что-то вроде этого:

Object[3] = [
    0: "Audi",
    1: [Engine[id=1]] <- here is the object engine with its simple properties
    2: "some-other-basic-car-property"
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...