2010-12-15 55 views
8

j'ai une superclasse Questions et sa sous-classe MultipleChoiceQuestionsun à plusieurs cartographie à une propriété de superclasse

superclasse a un champ activity

Je veux créer un Set<MultipleChoiceQuestions> et utiliser OneToMany annotation à l'aide mappedBy = "activity"

par exemple

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "activity") 
private Set<NQIMultipleChoiceQuestions> mcqQuestions = new HashSet<NQIMultipleChoiceQuestions>(); 

Je reçois cette erreur:

org.hibernate.AnnotationException: mappedBy reference an unknown target entity property 

Cependant, il fonctionne très bien si je crée un ensemble d'entités superclasse,

par exemple

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "activity") 
private Set<NQIQuestions> questions = new HashSet<NQIQuestions>(); 

est-il un moyen de la carte à la propriété de superclasse?

+0

@sahil, les deux lignes que vous avez montrées - où vous avez prétendu que la première ne fonctionnait pas, mais la seconde - ne diffèrent que par le nom de la variable 'Set'. –

+0

@binil: ya .. en fait dans le second cas, questions est la classe de base, alors que mcqQuestion est une sous-classe. – shailesh

+0

@OneToMany (fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "activité") \t private Définir questions = new HashSet (); – shailesh

Répondre

14

trouvé la solution pour cette ... :)

Nous pouvons y parvenir simplement en définissant la targetEntity =? dans la définition OneToMany ..

par exemple ..

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "activity" , targetEntity=NQIQuestions.class)  
private Set<NQIMultipleChoiceQuestions> mcqQuestions = new HashSet<NQIMultipleChoiceQuestions>(); 
+7

Mais l'ensemble n'inclut-il pas maintenant les objets d'autres sous-types? –

+0

Malheureusement, c'est vrai. Une solution possible avec Hibernate serait d'utiliser '@Where (clause =" ... ")' avec une clause where appropriée pour charger seulement le (s) sous-type (s) correct (s). –

0

Vous utilisez probablement Mise en veille prolongée et il ne supporte pas cette fonctionnalité (Hibernate ORM HHH-4233: cant bind a child using mappedby relating to a parent attribute(polymorphism). La fonction est rejetée pour des raisons controversées. Il y a un commentaire là par Nicholas Stuart, qui fournit plus de liens sur le sujet, y compris celui-ci donnant quelques solutions de contournement:.. Chris Wong's Development Blog: Polymorphic one to many relationships in Hibernate

une fois que nous le connaissons Hibernate seul problème, nous pouvons passer à autre chose OpenJPA, EclipseLink faire suppo rt il. S'il vous plaît ajouter un commentaire s'il y a plus de cadres à la liste ici.