Какая стратегия для Hibernate Inheritance - PullRequest
0 голосов
/ 15 марта 2012

Мой домен веб-приложения состоит из трех объектов:

  • Персона , представляющих человека, со всеми личными данными, такими как имя, фамилия, номер телефона и т. Д..
  • Заказчик и Поставщик : потомок «Персона».У каждого из них есть определенные свойства.

Теперь я хочу использовать Hibernate (с аннотациями ) для отображения моей модели в схему rdbms с клиентов и поставщиков таблиц.Мне не нужна общая таблица Person, она мне не нужна.

Мне нужна таблица клиентов с именем, фамилией, ... + конкретные поля клиента И таблица поставщиков с именем, фамилией .... + конкретные поля поставщика.

Как вы думаете, это глупо?Какое решение лучше?И как это реализовать ?

1 Ответ

2 голосов
/ 15 марта 2012

Нет, это не глупо и напрямую поддерживается в Hibernate, см .: 9.1.5.Таблица для конкретного класса .

<class name="Person">
    <id name="id" type="long" column="PERSON_ID">
        <generator class="sequence"/>
    </id>
    ...
    <union-subclass name="Customer" table="CUSTOMER">
        ...
    </union-subclass>
    <union-subclass name="Supplier" table="SUPPLIER">
        ...
    </union-subclass>
</class>

В JPA с аннотациями вы можете написать:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Person {
  ...
}

@Entity
public class Customer extends Person {
  ...
}

@Entity
public class Supplier extends Person {
  ...
}

Если вам не нужно выполнять запросы перекрестного наследования, такие как: " дайте мне всех людей с именем "Смит", независимо от того, являются ли они клиентами или поставщиками", эта стратегия довольно хороша.

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