2012-04-03 3 views
1

Моя структура классов выглядит так ... У меня есть две отдельные стратегии, реализуемые здесь, но стратегия наследования корневого класса, т.е. InheritanceType.JOINED, используется по всей иерархии ...Смешивание jpa стратегий наследования - inheritanceType.JOINED с inheritanceType.SINGLE_TABLE

@Entity 
@Inheritance(strategy = InheritanceType.JOINED) 
@DiscriminatorColumn(name = "typeName", discriminatorType = DiscriminatorType.STRING, length = 100) 
@Table(name="table_A") 
public abstract class A{ 
... 
} 


@Entity 
@Table(name = "table_B") 
@PrimaryKeyJoinColumn(name = "ID_B") 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorValue("SVC") 
public abstract class B extends A { 
... 
} 

@Entity 
@DiscriminatorValue("C") 
public class C extends B { 
... 
} 

@Entity 
@DiscriminatorValue("D") 
public class D extends B { 
... 
} 

Когда я создаю экземпляр «D» и пытаюсь сохраняться его, спящий режим ищет таблицу с именем «D» ...
Я нашел пару людей попросив такие же вопросы ... но ответы мне не помогли ...

mixing joined and single table inheritance and querying for all objects - тот же выпуск ..
How to mix inheritance strategies with JPA annotations and Hibernate? - смешивание single_table с присоединенным .. это не полезно в моем случае.

+0

Я нашел [решение] (http://stackoverflow.com/questions/40679517/how-to-mix-inheritance-type-in- jpa), используя только JPA openJPA без Hibernate. –

ответ

2

Спецификация JPA не позволяет смешивать стратегии в дереве наследования; он требует, чтобы вы установили стратегию наследования в корневой Entity. JDO - единственная спецификация, позволяющая использовать смешанные стратегии. Вы можете найти реализацию JPA, которая позволяет это, но она не переносима.

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