сопоставление одного со многими свойству суперкласса - PullRequest
9 голосов
/ 15 декабря 2010

У меня есть суперкласс Questions и его подкласс MultipleChoiceQuestions

Суперкласс имеет поле activity

Я хочу создать Set<MultipleChoiceQuestions> и использовать OneToMany аннотацию, используя mappedBy = "activity"

, например

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

Я получаю эту ошибку:

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

Однако, если я создаю набор сущностей суперкласса, он работает нормально,

, например

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

Есть ли способ сопоставить свойство суперкласса?

Ответы [ 2 ]

17 голосов
/ 15 декабря 2010

Нашли решение для этого ...:)

Мы можем достичь этого просто определив targetEntity =?в определении OneToMany ..

например ..

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "activity" , targetEntity=NQIQuestions.class)    
private Set<NQIMultipleChoiceQuestions> mcqQuestions = new HashSet<NQIMultipleChoiceQuestions>();
0 голосов
/ 07 октября 2017

Возможно, вы используете Hibernate, и он не поддерживает эту функцию ( Hibernate ORM HHH-4233: нельзя связать ребенка, используя mappedby, связанный с родительским атрибутом (полиморфизм) .Отклонено по спорным причинам. Там есть комментарий Николаса Стюарта, который предоставляет больше ссылок на эту тему, в том числе этот дает некоторые обходные пути: Блог разработчика Криса Вонга: Полиморфные отношения между многими в Hibernate .

Как только мы узнаем, что это только проблема Hibernate, мы можем переключиться на что-то еще. OpenJPA, EclipseLink действительно поддерживают это . Пожалуйста, добавьте комментарий, если здесь есть больше фреймворков.

...