【发布时间】:2021-09-18 23:33:04
【问题描述】:
首先,对不起我的英语不好。
我想将以下查询更改为“findBy~”方法,但我不知道如何。
@Query(value = "SELECT t FROM Table t WHERE (b.num1 = :variable or b.num2 IS NULL)")
或者,使用 'findby~' 方法名是不可能得到结果的吗? 如果有人能回复我将不胜感激。
【问题讨论】:
首先,对不起我的英语不好。
我想将以下查询更改为“findBy~”方法,但我不知道如何。
@Query(value = "SELECT t FROM Table t WHERE (b.num1 = :variable or b.num2 IS NULL)")
或者,使用 'findby~' 方法名是不可能得到结果的吗? 如果有人能回复我将不胜感激。
【问题讨论】:
Spring Data JPA 确实支持查询中的所有条件和条件嵌套。我认为您的查询名称将变得不必要地冗长。它最终会成为
Table findByNum1LessThanEqualOrNum1IsNullAndNum2GreaterThanEqualOrNum2IsNull(Integer var0, Integer var1);
这应该返回适当的查询,但您需要发送变量两次,每个equals 一次。
使用@Query,您可以随意调用查询并重复使用相同的变量。
现在,您可以通过使用默认方法来解决使用命名方法的缺点,例如
default Table myQuery (Integer var) {
return findByNum1LessThanEqualOrNum1IsNullAndNum2GreaterThanEqualOrNum2IsNull(var, var);
}
所以你调用它而不是实际的查询,但话又说回来,如果你不评论你的代码(你应该评论你的代码)。无论如何,我建议您对简单查询使用方法名称,对更复杂的查询使用 @Query。
请参考以下链接进一步阅读:
Spring JPA Query Keyword Repository
LeafyJava article on Query Precedence Tricks,它还提供了如何更改查询逻辑的示例,以防条件未按您想要的方式排列。
【讨论】: