Использование Hibernate для перечислений / кодов типов - PullRequest
0 голосов
/ 18 августа 2011

Я пытаюсь настроить XML-файлы Hibernate таким образом, чтобы перечисления использовались как строковые значения, а не как экземпляры классов.

Схема БД:

table MyEntity (EntityId, EnumerationId)
table MyEnumeration (EnumerationId, EnumerationValue)

Это обеспечивает сопоставление многих строк MyEntity с одной строкой MyEnumeration. Примером MyEnumeration могут быть страны.

Hibernate hbm2hbmxml производит:

<hibernate-mapping>
    <class name="MyEntity" table="MyEntity">
        <many-to-one name="myEnumeration" class="MyEnumeration" fetch="select">
            <column name="EnumerationId" length="36" />
        </many-to-one>
        ...
</hibernate-mapping>

Отображение, приведенное выше, работает так, что теперь я могу получить доступ к экземплярам MyEnumeration в моем коде, а затем получить EnumerationValue. Однако я хотел бы абстрагироваться от этого. Вместо этого я хотел бы получить доступ к свойству myEnumeration в виде строки вместо класса MyEnumeration.

Как я могу сделать это с файлом отображения Hibernate?

1 Ответ

0 голосов
/ 18 августа 2011
@Transient
public String getMyEnumerationValue() {
    if (this.myEnumeration == null) {
        return null;
    }
    else {
        return this.myEnumeration.getValue();
    }
}

Установщик является более сложным, потому что ему потребуется доступ к сеансу, чтобы получить идентификатор перечисления, имеющего заданное значение (при условии, что оно уникально), для заполнения поля myEnumeration.

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