2012-03-15 4 views
0

Моего домена WebAPP состоит из трех лиц:Какой стратегия для Hibernate наследование

  • Person, которые представляют собой человеческий субъект, со всеми личными данными, такими как имя, фамилия, номер телефона и так далее.
  • и Поставщик: Ребенок из 'Person'. Каждый из них обладает определенными свойствами.

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

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

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

+0

Как насчет прочтения документации? См. Http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#d0e7287 и http://docs.jboss.org/hibernate/core/3.6/reference/en-US/ html_single/# mapping-declaration-unionubclass –

ответ

2

Нет, это не глупо и поддерживается в Hibernate, см.: 9.1.5. Table per concrete class.

<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 { 
    ... 
} 

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

+0

1) создает ли таблицу PERSON? –

+1

@FabioB .: нет, это не так, как вы просили. –

Смежные вопросы