具有 CSV 值的列上的 JPA 查询 IN 子句未返回确切结果
Posted
技术标签:
【中文标题】具有 CSV 值的列上的 JPA 查询 IN 子句未返回确切结果【英文标题】:JPA query IN clause on column with CSV values not returning exact results 【发布时间】:2020-06-19 16:49:47 【问题描述】:我正在处理需要获得正确结果的 JPA 查询。
表结构(我们称之为T1):
这是我的 JPA 查询:
@Query("from T1 t where t.csv in :ids")
List<T1> listT1Records(@Param("ids") List<String> ids);
csv 列也可以包含非数字字符串。当我使用原始 sql 查询时,它返回记录 1、2 和 3 这是我想要的结果,但是当我调试我的代码时,返回的结果是只记录2。我到处寻找答案,但一无所获。
原始 Sql
select * from T1 where csv in (11);
【问题讨论】:
在您的测试期间 ids 列表包含什么?你也可以发布你的“原始sql”查询吗? @MarcoLucidi id 包含“11”。 什么数据类型存储csv列?似乎是来自 java 和表图片的字符串(varchar),但来自原始 sql 的数字。无论如何,如果它存储一个字符串,则 jpa 方法的输出是正确的,id 为 2 的记录是唯一在 csv 列中具有字符串“11”的记录。 【参考方案1】:IN
导致无法这样工作。
-
您应该将列表转换为逗号操作的字符串:
String.join(",", ids);
-
使用以下查询:
@Query("from T1 t where t.csv like %:ids%")
List<T1> listT1Records(@Param("ids") String ids);
【讨论】:
以上是关于具有 CSV 值的列上的 JPA 查询 IN 子句未返回确切结果的主要内容,如果未能解决你的问题,请参考以下文章
如何在 @OneToMany 关系映射的列上使用 JPA findBy 查询?
SQL Server:查询应用在 where 子句中,包含 Json 对象的列上的 IS NOT Null 需要更多时间