Как изменить это свойство Hibernate, чтобы не требовать оператора SQL - PullRequest
0 голосов
/ 29 сентября 2011

Я использую динамическую карту Hibernate для загрузки объектов DataEntry в мое приложение. Когда я загружаю любой данный объект DataEntry, я хочу получить описательное значение его столбца InformationTypeId. InformationTypeId таблицы DataEntry на самом деле представляет собой код в таблице InformationType. Я хочу, чтобы Hibernate делал в файле отображения, чтобы найти строку InformationType для объекта DataEntry и вернуть значение его столбца InformationDesc.

Вот таблицы и столбцы:

create table DataEntry (DataEntryID, InformationTypeId)
create table InformationType (InformationTypeId, InformationTypeDesc)

Следующий файл hbm.xml делает то, что я хотел бы загрузить. В свойстве informationType я указал столбец, используя атрибут read. Это вызывает этот конкретный запрос SQL.

<class entity-name="DataEntry" table="DataEntry">
    <id name="dataEntryId" type="string">
        <column name="DataEntryID" length="36" />
        <generator class="assigned" />
    </id>
    <property name="informationType" type="string">
        <column name="InformationTypeId"
                read="(SELECT TOP 1 InformationType.InformationDesc FROM InformationType WHERE InformationType.InformationTypeId = InformationTypeId)"/>
    </property>
</class>

Подход выше работает для загрузки. Хотя есть две проблемы:

  1. Обновления не работают
  2. Требуется ручной SQL (MS SQL Server).

Есть ли способ настроить это поведение без оператора SQL?

Это похоже на что-то, что было бы довольно распространенным, но я не видел никаких примеров этого. Я попробовал следующее с помощью соединения, но оно не работает. Я считаю, что это объединение не работает, потому что оно пытается соединиться с использованием закрытого ключа DataEntry. Мне нужно, чтобы он присоединился, используя DataEntry's InformationTypeId.

<join table="informationType" optional="true" fetch="select">
    <key column="InformationTypeId"/>
    <property name="informationType" type="string">
        <column name="InformationDesc"/>
    </property>
</join>

1 Ответ

0 голосов
/ 29 сентября 2011

Просто сопоставьте таблицу InformationType с сущностью InformationType и получите горячо извлеченную связь "многие к одному" между DataEntry и InformationType.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...