【问题标题】:Relating an entity to multiple subclass entities as a single relationship to the superclass in JPA?将一个实体与多个子类实体关联为与 JPA 中的超类的单一关系?
【发布时间】:2013-08-20 12:29:27
【问题描述】:

我正在使用 Play 2 框架和 ebean ORM 用 Ja​​va 构建应用程序。

我有一个实体类Person,它与几个具有超类型Certificate 的实体类相关,即abstract@MappedSuperclass。目前,我正在为每个子类创建一个关系,如下所示:

public class `Person` extends Model {
    // elided...
    @OneToMany
    public List<SubType1> subType1s;

    @OneToMany
    List<SubType2> subType2s;
    // elided...
}

子类如下所示:

public class SubTypeGeneric {
    // elided...
    @ManyToOne
    public Person person;
    // elided...
}

我想知道的是:是否可以将Person 中的子类实体列表组合成一个超类列表,如下所示:

public class `Person` extends Model {
    // elided...
    @OneToMany
    public List<SuperType> superTypes;
    // elided...
}

【问题讨论】:

    标签: java jpa orm playframework-2.1 ebean


    【解决方案1】:

    不,这是不可能的。关联是在实体之间,而不是在 MappedSuperclasses 之间。如果你有一个 OneToMany 可以是只有一个 ManyToOne 的反向关联。

    如果你想要,那么 Certificate 应该用 @Entity 注释,并且应该包含与 Person 而不是所有子类的 ManyToOne 关联。

    【讨论】:

    • 我注意到,当我与超类型实体和子类型实体都有关系时,检索超类关系的方法只返回那些,并且必须单独获取子类关系。我不认为将Certificate 作为一个实体并赋予它与Person 的关系将允许我添加和检索Certificate 的子类型。
    • 我没有使用 EBean 的经验,但是在这种情况下,JPA 的正确实现可以获取实体的所有实例,无论它们是否是子类的实例。所以,要么 EBean 有问题,要么你的代码有问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    相关资源
    最近更新 更多