我有一個如下的 sql 陳述句并想將其轉換為 JPA
SELECT * FROM employee
where user_id in ('id1', 'id2', 'id3')
AND (
first_name like '%name1%' OR last_name like '%name1%'
OR
first_name like '%name2%' OR last_name like '%name2%'
)
ORDER BY user_id ASC;
輸入引數
userIdList - 與大小 [1,100] 的 user_id 完全匹配的字串串列
nameList - 在字符 [A-Za-z0-9-_ ] 中同樣匹配大小為 [1,100] 的 first_name 或 last_name 的字串串列
名單示例:['Joe', 'Peter', 'White', 'XY']
我不知道如何處理類似部分的串列,而我擁有的最接近的是沒有類似串列
@Modifying
@Query(value = "select * from employee where user_id IN :ids ORDER BY user_id",
nativeQuery = true)
List<UserGroupTable> findAllByUserIdList(@Param("ids") List<String> userIdList);
在子句參考中:春季 JpaRepository 中的 %Like% Query
uj5u.com熱心網友回復:
正則運算式查詢可能是實作此目的的一種方法,如下所述: Searching multiple colums with a Contains query with a list of Items in Spring-Data JPA
MariaDB/示例MySQL:
@Query(nativeQuery = true, value = "SELECT * FROM my_entity WHERE "
"first_name REGEXP CONCAT_WS('|', :nameslist) " "OR "
"last_name REGEXP CONCAT_WS('|', :nameslist) ")
List<MyEntity> findByNames( // (method name does not matter)
@Param("nameslist") Collection<String> nameslist);
(CONCAT_WS加入提供的串列,例如('val1', 'val2', 'val3')加入到正則運算式'val1|val2|val3',它將匹配例如'complete val2xxx'。)
請注意,確切的 REGEXP / CONCAT_WS 函式取決于使用的 DB。
uj5u.com熱心網友回復:
假設意圖是 forname1并且name2也是引數,您只需要完成您的 JPA 查詢:
select *
from employee
where user_id IN :ids and (
first_name like :name1 or last_name like :name1 or
first_name like :name2 or last_name like :name2)
order by user_id
您更新的 Java 方法:
@Modifying
@Query(value = "select * from employee where user_id IN :ids and (first_name like :name1 or last_name like :name1 or first_name like :name2 or last_name like :name2) order by user_id",
nativeQuery = true)
List<UserGroupTable> findAllByUserIdList(@Param("ids") List<String> userIdList, @Param("name1") String name1, @Param("name2") String name2);
請注意,您系結到:name1實際:name2的通配符運算式。例如,對于 的名稱,您可以將和John Doe系結到兩個占位符。%John%%Doe%
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/410651.html
標籤:
下一篇:如何修復無法延遲初始化集合
