一对多映射到超类的属性

时间:2010-12-15 07:21:40

标签: hibernate annotations one-to-many

我有一个超类Questions及其子类MultipleChoiceQuestions

超类有一个字段activity

我想使用Set<MultipleChoiceQuestions>创建OneToMany并使用mappedBy = "activity"注释

e.g。

@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 

但是,如果我创建一组超类实体

,它可以正常工作

e.g。

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

有没有办法映射到超类的属性?

2 个答案:

答案 0 :(得分:17)

为此找到了解决方案...... :)

我们可以通过定义targetEntity =来实现这一目标吗?在OneToMany定义..

例如..

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

答案 1 :(得分:0)

可能您使用的是 Hibernate并且它不支持此功能Hibernate ORM HHH-4233: cant bind a child using mappedby relating to a parent attribute(polymorphism)。该功能因有争议的原因而被拒绝.Nicholas Stuart在那里发表了一条评论,提供了有关该功能的更多链接主题,包括这个主题提供了一些解决方法:Chris Wong's Development Blog: Polymorphic one to many relationships in Hibernate

一旦我们知道它只是Hibernate问题,我们就可以切换到别的东西。 OpenJPA,EclipseLink支持。如果此处列出了更多框架,请添加评论。