我是 Spring Jpa 初学者。我脑子里有一个错误。我想知道有什么好处和坏处:
- 处理服务类中的所有业务并多次调用仅包含基本操作(如 CRUD、getList ...)的 Jpa 存储库。
比
- 在 Jpa 存储库中进行长查询 @Query
。
最佳答案
通常,您总是需要调用单个查询 JPA 存储库,只选择您需要修改的对象。然后,您可以直接使用它的方法从检索到的对象加载数据和修改检索到的对象。查询未加载的数据将在对象需要时自动加载。
例如,您可以像这样加载一个人并修改其联系地址:
Person person = personRepository.find(personId);
for (Address address : person.getAddresses()) {
if ("CONTACT_ADDRESS".equals(address.getType()) {
address.setCity("London");
}
}
检索所有必要的数据并将所有修改持久保存到数据库中。
虽然这简单明了,但有时您可能会遇到性能问题,尤其是当您只需要加载一个地址而不是所有地址时。或者,如果您总是需要所有地址并希望将它们与人员一起加载到单个查询中。
那么在版本库中引入一个新的优化查询是一个很好的解决方案。例如,一个查询将使用 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 查询。
关于java - Spring Jpa 服务调用与 Jpa 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34193716/