Spring Boot:JPA 支持的关键字

Posted

技术标签:

【中文标题】Spring Boot:JPA 支持的关键字【英文标题】:Spring Boot: keywords supported for JPA 【发布时间】:2019-09-17 17:41:59 【问题描述】:

我想执行 Spring JPA 存储库,希望在其中一个列云中有多个值的 2 列之间应用 and 操作。

相同的 SQL 查询:

select * from table_name where col1='col1_val' and col2 IN ('col2_val_a','col2_val_b','col2_val_c');

我知道对于和操作,我可以扩展 JpaRepository 并使用以下方法创建方法:

List<MyPoJoObject> findByCol1AndCol2(String col1_val,String col2_val);

对于 IN 操作,我们可以使用:findByCol2In(Collection&lt;String&gt; col2_val)

但我不知道如何按照我之前提到的 sql 语句将提到的 JPA 默认方法合二为一。

【问题讨论】:

【参考方案1】:

您可以使用以下方法命名:

List<MyPoJoObject> findByCol1AndCol2In(String col1_val, Collection<String> col2_val);

在此链接repository-query-keywords 上,您可以找到repository query keywords,您也可以使用和组合它们。

【讨论】:

【参考方案2】:

您当然可以将两者结合为一种方法。

List<MyPoJoObject> findByCol1AndCol2In(String col1_val,String[] col2_val);

试试这个。我不确定它是否会接受Collection&lt;String&gt;。我会尝试并更新答案。

HTH。

【讨论】:

【参考方案3】:

如果您想对多于两列执行此逻辑,那么您的方法名称会变得冗长。

您为什么不能编写自己的 JPA 查询,而不是坚持使用 Spring 命名。

例子:

@Query("select pojo from MyPoJoObject as pojo where pojo.col1 = :col1_val and pojo.col2 in :col2_val")
List<MyPoJoObject> findByColumns(String col1_val, List<String> col2_val);

【讨论】:

我们可以使用上面评论中提到的spring默认操作符。感谢您的评论。

以上是关于Spring Boot:JPA 支持的关键字的主要内容,如果未能解决你的问题,请参考以下文章

Spring data JPA 支持的方法关键字命名

在 Spring Boot JPA 中找不到实体列名称

Spring Boot,Spring Data JPA多数据源支持配置

自建生成代码工具(暂支持Spring boot +JPA)(更新中)

spring boot jpa 配置了yml文件后怎么扫描包

Spring Boot 和 JPA 2.0