繁体   English   中英

Spring Jpa Service调用vs Jpa查询

[英]Spring Jpa Service calls vs Jpa query

我是Spring Jpa的初学者。 我脑子里有一个小虫。 我想知道以下有什么好处和坏处:
- 处理Service类中的所有业务并多次调用Jpa Repository,它只包含CRUD,getList等基本操作。
VS
- 在Jpa Repository中进行长查询@Query

通常,您始终需要调用单个查询JPA存储库,仅选择需要修改的对象。 然后,您可以使用其方法直接从中加载数据并修改检索到的对象。 未被查询加载的数据将在对象需要时自动加载。

例如,您可以加载一个人并修改其联系地址,如下所示:

Person person = personRepository.find(personId);
for (Address address : person.getAddresses()) {
  if ("CONTACT_ADDRESS".equals(address.getType()) {
    address.setCity("London");
  }
}

检索所有必要的数据,并将所有修改保存到DB。

虽然这很简单易行,但有时您可能会遇到性能问题,尤其是当您只需要加载一个地址而不是所有地址时。 或者,如果您总是需要所有地址,并希望与人一起在单个查询中加载它们。

然后,在存储库中引入新的优化查询是一个很好的解决方案。 例如,一个查询,它将使用fetch join加载所有地址,并且在迭代地址时不需要额外的延迟(自动)查询来加载它们:

@Query("select distinct u from User u left join fetch u.addresses where u.id = ?")
public List<User> findWithAddresses(Long id);

除了为findWithAddresses()切换方法find()之外,这不需要更改上面的代码。 但是在后台只执行单个SQL查询而不是多个SQL查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM