在以下之间使用 Spring Data JPA 关键字时是否有任何区别:
List<SomeEntity> findBySomeCondition();
和
List<SomeEntity> findAllBySomeCondition();
原文由 Nikita 发布,翻译遵循 CC BY-SA 4.0 许可协议
在以下之间使用 Spring Data JPA 关键字时是否有任何区别:
List<SomeEntity> findBySomeCondition();
和
List<SomeEntity> findAllBySomeCondition();
原文由 Nikita 发布,翻译遵循 CC BY-SA 4.0 许可协议
为了说明差异,让我们看一下这两个函数:
1. Set<Policy> findAllByRoleIn(Iterable<Role> role);
2. Set<Policy> findByRoleIn(Iterable<Role> role);
第一个函数生成的查询:
1. select policy.id, policy.role from policy where (policy.role in (? , ? , ? , ?))
第二个函数生成的查询:
2. select policy.id, policy.role from policy where (policy.role in (? , ? , ? , ?))
结论:很明显,如果我们查看这两个函数生成的查询。我们可以清楚地看到,两个函数定义之间没有区别,它们执行完全相同的查询。
原文由 Zahid Khan 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
不,它们之间没有区别,它们将执行完全相同的查询,
All
部分在从方法名称派生查询时被 Spring Data 忽略。唯一重要的一点是By
关键字,它后面的任何内容都被视为字段名称(其他关键字除外OrderBy
顺便说一句,它可能会导致一些看起来很奇怪的方法名称,例如findAllByOrderByIdAsc
)。这意味着这样的事情是完全有效的:
并将执行与以下完全相同的 SQL 查询:
或者
Spring Data 2.3.6 版本的 文档 讨论了这个特性:
该功能的目的在一篇关于即将发布的 Spring Data 2.0 版本的 博客文章 中进行了解释: