内容简介:在实施@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>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。