2016-11-18 4 views
1

Как смешивать однонаправленное наследование типа таблицы с типом таблицы соединений в том же дереве наследования? Я не использую hibernate только JPA. Я знаю, что официальной поддержки смешанного наследования нет, читая спецификацию JPA. Я не могу изменить архитектуру. Он работал с спящим режимом, но теперь мне нужно реализовать это с помощью openjpa. Я ищу способ обхода.Как смешать тип наследования в JPA

+0

Вам нужно добавить контекст. Можете ли вы опубликовать код того, что вы пытаетесь? – bradimus

+0

JPA говорит вам четко указать стратегию наследования в корне дерева, и это все, что есть. Как именно вы можете «смешивать» это с этим ограничением? –

ответ

1

это работает для меня:

суперкласса:

@Entity 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name = "TYPE_DISCRIMINATOR") 
public class A extends SomeClass implements SomeInteface { 


… 
@Id 
@Column(name = "ID", nullable = false, precision = 0) 
public Integer getPk() { 
    return super.getPk(); 
} 
… 

Обратите внимание, что "SomeClass" не является объектом.

Подкласс - "JOIN" Наследование:

@Entity 
@SecondaryTable(name = "A_SECOND_TABLE", pkJoinColumns = @PrimaryKeyJoinColumn(name ="ID")) 
@DiscriminatorValue("BD") 
public class B extends A implements SomeIntefaceB { 
… 

Создать новую таблицу "A_SECOND_TABLE" с присоединиться на супер класса первичного ключа "ID". каждого поле, которое не присоединиться к колонку и появляется в нашей таблице помечено как это:

@Basic 
@Column(table = "A_SECOND_TABLE", name = "STATUS", nullable = false, precision = 0) 

Примечания табличного значения.

Подкласс - одна таблица наследования:

@Entity 
public class C extends A implements SomeIntefaceC {... 

просто одна таблица наследования.

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