【问题标题】:one to many mapping to a property of superclass一对多映射到超类的属性
【发布时间】:2011-05-25 18:13:54
【问题描述】:

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

超类有一个字段activity

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

例如

@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>();

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

【问题讨论】:

  • @sahil,您显示的两行 - 您声称第一行不起作用,但第二行起作用 - 仅在 Set 的变量名称上有所不同。
  • @binil : 是的。实际上在第二种情况下,问题是基类,而 mcqQuestion 是子类。
  • @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "activity") private Set questions = new HashSet();
  • @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "activity") 私有集 mcqQuestions = new HashSet();
  • NQIQuestions 是 NQIMultipleChoiceQuestions 的超类

标签: hibernate annotations one-to-many


【解决方案1】:

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

我们可以通过定义 targetEntity = ?在 OneToMany 定义中..

例如..

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

【讨论】:

  • 但是集合现在不也包括其他子类型的对象吗?
  • 不幸的是,这是真的。 Hibernate 的一个可能解决方案是使用 @Where(clause="...") 和一个合适的 where 子句来只加载正确的子类型。
  • 谢谢! targetEntity 刚刚解决了我的问题。非常感谢!
【解决方案2】:

您可能使用 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 都支持它。如果这里有更多框架要列出,请添加评论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 2011-07-12
    相关资源
    最近更新 更多