2017-03-22 1 views
1

Je suis en train de reproduire un comportement de mise en veille prolongée à l'aide OpenJPA, j'ai essayé quelque chose comme:En utilisant le même type discriminant pour superclasse et sous-classe dans OpenJPA

SuperClass:

@Entity 
@Table(name = "A") 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name = "TYPE") 
@DiscriminatorValue("A") 
public class A{... 

SubClass:

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

qui provoque l'exception indiquant que deux classes ne peuvent pas avoir le même discriminateur.

Existe-t-il une solution pour cela en utilisant uniquement les annotations?

+0

la classe abstraite ne devrait pas avoir besoin d'une "valeur" –

+0

Ce n'est pas abstruct maintenant. –

Répondre

1

Donc ce que vous dites est que vous voulez persister un objet de type A et un objet de type B et quand ils sont récupérés alors ils sont tous les deux instanciés comme des instances de type A? donc le B ne sera plus un B !!

Je ne trouve aucune situation où cela serait considéré comme bonne idée. Toute implémentation JPA qui impose que tous les types concrets ont une valeur discriminante différente fait la bonne chose. Par conséquent, nous pouvons conclure que le comportement est comme il se doit, et "travailler autour d'elle" est une mauvaise idée.

+0

Je comprends que c'est un mauvais design bien qu'il fonctionne avec Hibernate. J'essaie juste de le faire migrer vers openjpa, alors qu'il y a beaucoup de dépendances de logique métier qui peuvent casser si je change ce desgin, ce qui est trop cher. J'ai besoin de deux entités associées à la même table, une sous-classe et une super-classe, avec le même discriminateur de type. –