如何使用Spring Data进行一个实体中一部分数据的更新? | Baeldung

JPA定义了两个注释, @Modifying
和 @Query
,它们使我们可以显式地编写更新语句。现在,我们可以告诉我们的应用程序在更新期间的行为方式,而不会给ORM造成负担。

让我们在存储库respository中添加我们的自定义更新方法:

@Repository
<b>public</b> <b>interface</b> CustomerRepository <b>extends</b> CrudRepository<Customer, Long> {
    Customer findById(<b>long</b> id);

 @Modifying
@Query(<font>"update Customer u set u.phone = :phone where u.id = :id"</font><font>)
<b>void</b> updatePhone(@Param(value = </font><font>"id"</font><font>) <b>long</b> id, @Param(value = </font><font>"phone"</font><font>) String phone);

}
</font>

仅仅更新Customer中的phone字段:

<b>public</b> <b>class</b> CustomerDto {
    <b>private</b> <b>long</b> id;
    <b>public</b> String name;
    <b>public</b> String phone;
  
}

在服务中调用上述存储库接口代码

public void updateCustomer(CustomerDto dto) {

Customer myCustomer = repo.findById(dto.id);

repo.updatePhone(…);

}

如果有很多phone字段怎么办?

<b>public</b> <b>class</b> CustomerDto {
    <b>private</b> <b>long</b> id;
    <b>public</b> String name;
    <b>public</b> String phone;
    <font><i>//...</i></font><font>
    <b>private</b> String phone99;
}
</font>

将这些频繁更新的字段合并成一个子对象或集合:

@Entity <b>public</b> <b>class</b> CustomerStructured {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    <b>public</b> Long id;
    <b>public</b> String name;
    @OneToMany(fetch = FetchType.EAGER, targetEntity=ContactPhone.<b>class</b>, mappedBy=<font>"customerId"</font><font>)    
    <b>private</b> List<ContactPhone> contactPhones;
}
</font>

可以 在GitHub
获得本文的源代码。

原文 

https://www.jdon.com/54453

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 如何使用Spring Data进行一个实体中一部分数据的更新? | Baeldung

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址