【发布时间】:2019-06-06 19:40:37
【问题描述】:
我正在使用 JPQL 在 JPA 的 CurdRepository 接口中编写 SQL 查询。我能够编写多个带有命名参数的查询,它们就像一种魅力。
但是,我的应用程序要求我将未知数量的字符串与表中的多个列进行匹配。据我所知,在 SQL 中它看起来像这样:
SELECT * FROM TABLE WHERE COLUMN_1 LIKE "%string_1%" OR COLUMN_1 LIKE"%string_2%" ... OR COLUMN_2 LIKE "%string_1%" OR COLUMN_2 LIKE "%string_2%" ... ...
我在 MySQL 中试过这个,它工作正常。但是,我不知道如何在 JPQL 中描述这一点。通过将命名参数设置为List,我能够为IN 子句传递多个值,如下所示:
@Query("SELECT t FROM Table t WHERE TABLE_ID IN (:table_ids)")
public Page<Table> findByParameters(@Param("table_ids") List<Integer> table_ids, Pageable page)
我尝试使用LIKE 子句做同样的事情,但如果我传递超过 1 个值,我最终会得到 0 个结果。 LOCATE 子句也面临同样的问题。
在最坏的情况下,我可以设置一个对一个字符串起作用的查询,并多次调用它,然后合并所有结果。不过,我宁愿避免这种情况,因为它只不过是一种胶带解决方案。
我在网上寻找了几个小时的解决方案,但没有找到任何解决我问题的方法。非常感谢任何提示。
谢谢。
【问题讨论】:
-
你能访问你的spring存储库使用的
EntityManager吗?我的意思是,你有可以注入EntityManager的服务吗? -
@CarlitosWay 我有服务,但我没有使用
EntityManager。我有一个实现CrudRepository的存储库接口,并使用该服务从所述存储库调用不同的方法。
标签: java mysql spring-boot jpa jpql