You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写包含AND与OR组合条件的JPA FindBy查询

方案1:通过JPA方法名直接派生查询

你给出的条件中col2 > 0 or col2 = 0本质等价于col2 >= 0,简化后方法名可读性更高:

// 简化写法,调用时传入参数 1,0,0,0,0 即可得到目标结果
List<SomeTableEntity> findByCol1AndCol2GreaterThanEqualAndCol3GreaterThanEqualAndCol4GreaterThanEqualAndCol5GreaterThanEqual(Integer col1, Integer col2Min, Integer col3Min, Integer col4Min, Integer col5Min);

如果完全按照原始的or嵌套逻辑不做简化,方法名会非常冗长,参数也冗余,非常不推荐:

// 完全匹配原始or逻辑的写法,调用时需要传入参数 1,0,0,0,0,0,0,0,0
List<SomeTableEntity> findByCol1AndCol2GreaterThanOrCol2EqualsAndCol3GreaterThanOrCol3EqualsAndCol4GreaterThanOrCol4EqualsAndCol5GreaterThanOrCol5Equals(Integer col1, Integer col2Gt, Integer col2Eq, Integer col3Gt, Integer col3Eq, Integer col4Gt, Integer col4Eq, Integer col5Gt, Integer col5Eq);

方案2:使用@Query注解(更推荐,可读性和可维护性更高)

多条件嵌套的场景直接写查询语句逻辑更清晰,不需要传冗余参数:

@Query("SELECT t FROM SomeTableEntity t WHERE t.col1 = :col1 AND (t.col2 > 0 OR t.col2 = 0) AND (t.col3 > 0 OR t.col3 = 0) AND (t.col4 > 0 OR t.col4 = 0) AND (t.col5 > 0 OR t.col5 = 0)")
List<SomeTableEntity> findMatchingRecords(@Param("col1") Integer col1);

调用时只需要传入参数1即可得到目标结果。

内容的提问来源于stack exchange,提问作者Naman Mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:48:03