将Java 8 Optional视为处理所有的空值的“银弹”可能会带来更多弊大于利。合适它们是最好的方法。
本文的应用程序是在实体和查询中如何正确使用Java 8 Optional的概念证明。
关键点:
源代码可以在 这里 找到 。
@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> Optional<String> getName() {
<b>return</b> Optional.ofNullable(name);
}
<b>public</b> <b>void</b> setName(String name) {
<b>this</b>.name = name;
}
<b>public</b> Optional<Tournament> getTournament() {
<b>return</b> Optional.ofNullable(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>
@Repository
<b>public</b> <b>interface</b> TennisPlayerRepository <b>extends</b> JpaRepository<TennisPlayer, Long> {
@Transactional(readOnly=<b>true</b>)
Optional<TennisPlayer> findByName(String name);
}