如何在Hibernate/JPA的实体和查询中使用Java 8 Optional?

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

内容简介:将Java 8 Optional视为处理所有的空值的“银弹”可能会带来更多弊大于利。合适它们是最好的方法。本文的应用程序是在实体和查询中如何正确使用Java 8 Optional的概念证明。关键点:

Java 8 Optional视为处理所有的空值的“银弹”可能会带来更多弊大于利。合适它们是最好的方法。

本文的应用程序是在实体和查询中如何正确使用Java 8 Optional的概念证明。

关键点:

  • 使用Spring Data内置查询方法返回Optional(例如findById())
  • 编写我们自己的查询返回Optional
  • 在实体getter使用Optional
  • 为了运行不同的场景,检查文件:data-mysql.sql

源代码可以在 这里 找到  。

@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);
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

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

免费

免费

克里斯•安德森 / 蒋旭峰、冯斌、璩静 / 中信出版社 / 2012-10 / 68.00元

一种商业模式既可以统摄未来的市场,也可以挤垮当前的市场——在我们这个现代经济社会里,这并不是一件不可能的事情。 “免费”就是这样的一种商业模式,它所代表的正是数字化网络时代的商业未来。 在《免费》这本书中,克里斯•安德森认为,新型的“免费”并不是一种左口袋出、右口袋进的营销伎俩,而是一种把货物和服务的成本压低到零的新型卓越能力。在20世纪“免费”是一种强有力的推销手段,而在21世纪它已经成为......一起来看看 《免费》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具