Spring Data JPA Repository如何按Player的id查询包含对应玩家的Game对局
结论
完全可以通过Spring Data JPA的Repository方法命名规则实现该需求,你当前写的方法名不符合命名语法规范,调整后即可直接使用。
正确的Repository方法写法
@Repository public interface GameRepository extends JpaRepository<Game, Integer> { // 增加Distinct关键字避免关联查询返回重复的Game记录 Page<Game> findDistinctByWhiteContributors_IdOrBlackContributors_Id(int playerId, Pageable pageable); }
命名规则说明
Spring Data JPA针对集合类型属性的嵌套字段查询,遵循以下逻辑:
- 先写实体类中定义的集合属性名:
WhiteContributors/BlackContributors - 用下划线
_分隔,后面跟集合元素的字段名:Id,即匹配集合中Player对象的id字段 - 用
Or关键字连接两个条件,只要白方贡献者或黑方贡献者中存在对应id的玩家就满足查询条件 - 额外增加
Distinct关键字是为了避免多表关联查询时返回重复的Game对象,如果你确定不会出现重复也可以去掉。
该方法会自动生成对应关联查询语句,无需手动编写JPQL或原生SQL,会自动匹配多对多中间表的关联关系,完全符合你基于玩家ID查询对局的需求。
内容的提问来源于stack exchange,提问作者danny-bernier
相关产品推荐
相关产品推荐

