2010-12-15 6 views
8

Ich habe eine Superklasse Questions und seine Unterklasse MultipleChoiceQuestionsone to many-Mapping auf eine Eigenschaft von Super

Superklasse ein Feld activity

Ich möchte ein Set<MultipleChoiceQuestions> und mappedBy = "activity"

mit OneToMany Anmerkung zum Erstellen hat z.B

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

Ich erhalte diese Fehlermeldung:

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

aber es funktioniert gut, wenn ich eine Reihe von Super Einheiten erstellen,

z.B.

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

Gibt es eine Möglichkeit, Eigenschaften der Superklasse zuzuordnen?

+0

@sahil, die zwei Zeilen, die Sie gezeigt haben - wo Sie behaupteten, dass die erste nicht funktionierte, aber die zweite - unterscheiden sich nur im Variablennamen des 'Set'. –

+0

@binil: ya .. eigentlich im zweiten Fall, Fragen ist die Basisklasse, während mcqQuestion Unterklasse ist. – shailesh

+0

@OneToMany (fetch = FetchType.EAGER, Kaskade = CascadeType.ALL, mappedBy = "Aktivität") \t privat Set questions = new HashSet (); – shailesh

Antwort

14

die Lösung gefunden ... :)

Wir dies nur durch die Definition der targetEntity erreichen =? in der OneToMany Definition ..

zB ..

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

Aber enthält das Set jetzt auch Objekte anderer Subtypen? –

+0

Leider ist das wahr. Eine mögliche Lösung mit Hibernate wäre die Verwendung von '@Where (clause =" ... ")' mit einer geeigneten where-Klausel, um nur die korrekten Untertypen zu laden. –

0

Wahrscheinlich verwenden Sie Hibernate und es diese Funktion nicht unterstützt (Hibernate ORM HHH-4233: cant bind a child using mappedby relating to a parent attribute(polymorphism). Das Merkmal für kontroverse Gründen abgelehnt wird. Es gibt einen Kommentar dort Nicholas Stuart, die mehr Links zu diesem Thema bietet, auch diese einige Abhilfen geben:.. Chris Wong's Development Blog: Polymorphic one to many relationships in Hibernate

Sobald wir wissen, dass es nur Problem Hibernate, wir, um etwas anderes zu wechseln OpenJPA, tun Eclipse suppo rt es. Bitte fügen Sie einen Kommentar hinzu, wenn mehr Frameworks hier aufgelistet werden sollen.