2010-12-15 13 views
8

ho una superclasse Questions e la sua sottoclasse MultipleChoiceQuestionsuno a molti mappatura a una proprietà di superclasse

superclasse ha un campo activity

voglio creare un Set<MultipleChoiceQuestions> e utilizzare OneToMany annotazioni utilizzando mappedBy = "activity"

per esempio

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

sto ottenendo questo errore:

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

Tuttavia, funziona bene se creo un insieme di entità superclasse,

esempio

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

C'è un modo per mappare alla proprietà della superclasse?

+0

@sahil, le due linee che hanno mostrato - in cui si sosteneva che il primo non ha funzionato, ma il secondo ha fatto - si differenziano solo per il nome della variabile del 'set'. –

+0

@binil: ya .. in realtà nel secondo caso, le domande è la classe base, mentre mcqQuestion è sottoclasse. – shailesh

+0

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

risposta

14

ha trovato la soluzione per questo ... :)

possiamo raggiungere questo semplicemente definendo il targetEntity =? nella definizione OneToMany ..

ad es ..

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

Ma non il set ora comprendono anche oggetti di altri sottotipi? –

+0

Sfortunatamente, questo è vero. Una possibile soluzione con Hibernate sarebbe usare '@Where (clausola = "...")' con un adatto clausola where solo caricare il sottotipo (s) corretto. –

0

Probabilmente si utilizza Hibernate e non supporta questa funzione (Hibernate ORM HHH-4233: cant bind a child using mappedby relating to a parent attribute(polymorphism). La funzione è respinto per ragioni controverse. C'è un commento là da Nicholas Stuart che fornisce più i collegamenti con il soggetto, compreso questo dando alcune soluzioni:.. Chris Wong's Development Blog: Polymorphic one to many relationships in Hibernate

una volta che sappiamo che è Hibernate unico problema, siamo in grado di passare a qualcos'altro OpenJPA, EclipseLink fare suppo rt it. Si prega di aggiungere un commento se ci sono più quadri da elencare qui.

Problemi correlati