Таблица для каждой конкретной иерархии классов в режиме гибернации

StackOverflow https://stackoverflow.com/questions/410630

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть следующее отображение гибернации, которое должно быть сопоставлено с использованием таблицы для каждой конкретной иерархии классов:

<hibernate-mapping package='dao'>
    <meta attribute='class-description'></meta>
    <class name='PropertyDAO'>
        <id name='id' column='id_property'>
            <generator class='assigned'/>
        </id>
        <property name='address' column='address' type='string'/>
        <union-subclass name='HouseDAO' table='house'>
            <property name='noOfRooms' column='noOfRooms'/>
            <property name='totalArea' column='totalArea'/>
            <property name='price' column='price'/>
        </union-subclass>
        <union-subclass name='LandDAO' table='land'>
            <property name='area' column='area'/>
            <property name='unitPrice' column='unitPrice'/>
        </union-subclass>
    </class>
</hibernate-mapping>

Это означает, что в базе данных у меня есть только 2 таблицы :

  • дом (id_property (PK), адрес, количество комнат, общая площадь, цена)
  • земельный участок (id_property (PK), адрес, площадь, цена единицы измерения)

Насколько я понял, в этом случае идентификаторы должны быть сгенерированы явно перед вызовом .save(), поэтому мой вопрос таков:Как я могу создать стратегию для автоматической генерации идентификаторов, чтобы идентификаторы из конкретного класса при объединении образовывали непрерывный домен?

Это было полезно?

Решение 3

Решение состоит в том, чтобы создать другую таблицу, в которой хранится следующий идентификатор;это значение должно изменяться каждый раз, когда пользователь хочет вставить новый объект.Таким образом, домен является непрерывным

Другие советы

ИМХО, ваша модель в БД неверна, поскольку у вас есть избыточная информация в нескольких связанных таблицах.

Таблица для каждого конкретного класса - это модель наследования, которая создает проблемы во время выполнения, поскольку у вас может возникнуть ситуация, когда кто-то обновляет адрес земли, но не дома, хотя они одинаковы (семантически).Ввод в эксплуатацию.:отбросьте эту модель и введите таблицу для каждого подкласса, чтобы у вас была базовая таблица свойств с идентификатором и адресом и две отдельные таблицы с PK, которая является FK для pk базы свойств, одна - house с полями, специфичными для дома, другая - land с полями, специфичными для земли.

Это создаст вам наименьшее количество проблем, поскольку это способ преобразования наследования между типами сущностей в реляционные таблицы (см. Книги Найссена / Халпина о NIAM / ORM)

Я использовал следующее с joined-подклассом

<key column="id"/>

Это должно заставить подклассы использовать идентификаторы из таблицы свойств, поскольку это зависит от нее.(super) Столбец ссылается на столбец в подклассе, который является внешней ссылкой на super.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top