2010-12-15 23 views
8

tengo una superclase Questions y de su subclase MultipleChoiceQuestionsuno a muchos mapeo a una propiedad de la superclase

superclase tiene un campo activity

Quiero crear una Set<MultipleChoiceQuestions> y utilizar OneToMany anotación utilizando mappedBy = "activity"

p.ej

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

estoy recibiendo este error:

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

Sin embargo, funciona bien si creo un conjunto de entidades superclase,

por ejemplo,

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

¿Hay alguna manera de asignar a la propiedad de superclase?

+0

@sahil, las dos líneas que mostró (donde afirmó que la primera no funcionó, pero la segunda sí) difieren solo en el nombre de la variable del 'Conjunto '. –

+0

@binil: ya ... en realidad en el segundo caso, las preguntas son la clase base, mientras que mcqQuestion es la subclase. – shailesh

+0

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

Respuesta

14

encontrado la solución para esto ... :)

podemos lograr esto simplemente mediante la definición de la targetEntity =? en la definición OneToMany ..

por ejemplo ..

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

Pero, ¿el conjunto ahora también incluye objetos de otros subtipos? –

+0

Lamentablemente, esto es cierto. Una posible solución con Hibernate sería usar '@Where (cláusula =" ... ")' con una cláusula WHERE adecuada para cargar solo el (los) subtipo (s) correcto (s). –

0

Probablemente usted utiliza Hibernate y que no soporta esta característica (Hibernate ORM HHH-4233: cant bind a child using mappedby relating to a parent attribute(polymorphism). La característica es rechazada por razones polémicas. Hay un comentario allí Nicholas Stuart que proporciona más enlaces sobre el tema, incluyendo éste da algunas soluciones:.. Chris Wong's Development Blog: Polymorphic one to many relationships in Hibernate

una vez que sabemos que es sólo Hibernate problema, podemos cambiar a otra cosa OpenJPA, EclipseLink hacer suppo rt es. Agregue un comentario si hay más marcos para enumerar aquí.

Cuestiones relacionadas