Hibernate/JPA中如何正确使用@OneToMany双向关系?

栏目: Java · 发布时间: 5年前

内容简介:在实施@OneToMany双向关系时,有很多方法会搞砸。这里说明一下最佳实践方式:关键点:源代码可以在

在实施@OneToMany双向关系时,有很多方法会搞砸。这里说明一下最佳实践方式:

关键点:

  • 始终从父级到子级实现级联
  • 在父类上使用mappedBy
  • 在父类上使用orphanRemoval以删除父类不再引用的子类
  • 在父类上使用helper方法可以使关联的两端保持同步
  • 始终使用延迟提取
  • 使用自然/业务key或使用实体标识符并覆盖equals(),hashCode()如此 处所示

源代码可以在 这里 找到  。

父类:
@Entity
<b>public</b> <b>class</b> Tournament implements Serializable {

    <b>private</b> <b>static</b> <b>final</b> <b>long</b> serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    <b>private</b> Long id;

    <b>private</b> String name;

    @OneToMany(cascade = CascadeType.ALL, 
            mappedBy = <font>"tournament"</font><font>, orphanRemoval = <b>true</b>)
    <b>private</b> List<TennisPlayer> tennisPlayers = <b>new</b> ArrayList<>();
</font>
子类:
@Entity
<b>public</b> <b>class</b> TennisPlayer implements Serializable {

    <b>private</b> <b>static</b> <b>final</b> <b>long</b> serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    <b>private</b> Long id;

    <b>private</b> String name;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = <font>"tournament_id"</font><font>)
    <b>private</b> Tournament tournament;

    <b>public</b> Long getId() {
        <b>return</b> id;
    }

    <b>public</b> <b>void</b> setId(Long id) {
        <b>this</b>.id = id;
    }

    <b>public</b> String getName() {
        <b>return</b> name;
    }

    <b>public</b> <b>void</b> setName(String name) {
        <b>this</b>.name = name;
    }

    <b>public</b> Tournament getTournament() {
        <b>return</b> tournament;
    }

    <b>public</b> <b>void</b> setTournament(Tournament tournament) {
        <b>this</b>.tournament = tournament;
    }

    @Override
    <b>public</b> <b>boolean</b> equals(Object obj) {
        <b>if</b> (<b>this</b> == obj) {
            <b>return</b> <b>true</b>;
        }
        <b>if</b> (!(obj instanceof TennisPlayer)) {
            <b>return</b> false;
        }
        <b>return</b> id != <b>null</b> && id.equals(((TennisPlayer) obj).id);        
    }

    @Override
    <b>public</b> <b>int</b> hashCode() {
        <b>return</b> 2018;
    }
}
</font>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

.NET设计规范

.NET设计规范

克瓦林纳 / 葛子昴 / 人民邮电出版社 / 2006-7 / 49.00元

本书为框架设计师和广大开发人员设计高质量的软件提供了权威的指南。书中介绍了在设计框架时的最佳实践,提供了自顶向下的规范,其中所描述的规范普遍适用于规模不同、可重用程度不同的框架和软件。这些规范历经.net框架三个版本的长期开发,凝聚了数千名开发人员的经验和智慧。微软的各开发组正在使用这些规范开发下一代影响世界的软件产品。. 本书适用于框架设计师以及相关的专业技术人员,也适用于高等院校相关专业......一起来看看 《.NET设计规范》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

html转js在线工具
html转js在线工具

html转js在线工具