【问题标题】:JPA parent/child relationshipJPA 父/子关系
【发布时间】:2013-10-19 18:14:13
【问题描述】:

使用 JPA (Hibernate) 我正在尝试实现以下关系,并想知道其他人是否对最佳方法有任何建议:

@Entity(name="SOMETHING")
public class Something {
    List<MetaDatum> metaData;
}

@Entity(name="SOMETHING_COMPLETELY_DIFFERENT")
public class SomethingCompletelyDifferent {
    List<MetaDatum> metaData;
}

@Entity(name="META")
public class MetaDatum {

}

基本上是n 完全不相关的对象,每个对象都有一个公共子对象的集合;在对象模型中实现简单,在数据库中稍微麻烦一点!

我确信这一定很常见,但我很难找到任何示例实现,因为我真的不知道正确的搜索词。

感谢您的宝贵时间!

【问题讨论】:

    标签: java hibernate jpa parent-child


    【解决方案1】:

    看起来像 @OneToMany 注释在 SomethingSomethingCompletelyDifferent (SCD) 实体中的 metaData 字段上的情况。你从那里去哪里取决于。

    由于SomethingSCD 没有共同的祖先,您不能简单地使关系双向并使用连接列。

    有多种解决方案,因此您必须根据实际用例来决定。

    • 如果您不需要从 MetaDatum 遍历到它的父实体,只需坚持单向关系即可。该关系将通过休眠映射到连接表。

    • MetaDatum1MetaDatum2 实体分开,它们可以与其各自的父对象建立双向关系。

    • 为两个父实体创建一个共同的祖先,包含与MetaDatum的双向关系

    • 创建两个实体,每个实体都封装一个List&lt;MetaDatum&gt;,为与SomethingSCD 实体的双向关系量身定制

    【讨论】:

    • 很好的答案,感谢您的信息!我认为您的第一个解决方案最适合我正在开发的内容,因为我不需要这种关系是双向的,并且可以想象有十多个对象需要这种关系。
    • 我会选择第五个选项,即拥有多个所有者字段,每个字段都关联一个 JoinTable。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多