我有一个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-与大小为[1100]的user\u id完全匹配的字符串列表
nameList-一个字符串列表,用于在字符[a-Za-z0-9-\u2]中精确匹配大小为[1100]的first\u name或last\u name
姓名列表示例:[“Joe”、“Peter”、“White”、“X Y”]
我不知道如何处理相似部分的列表,最近的一次是没有相似部分的列表
@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);
In子句引用:%Like%在spring JpaRepository中查询
假设意图是将名称1和名称2也作为参数,那么您只需完成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%
到两个占位符。
regex查询可能是实现这一点的一种方法,如下所述:使用包含Spring数据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\u WS
将提供的列表,例如,('val1','val2','val3')
连接到正则表达式'val1 | val2 | val3',该正则表达式将匹配例如'completeval2
xxx'
请注意,确切的REGEXP/CONCAT\u WS函数取决于使用的数据库。
问题内容: 我想用类似SQL的子句过滤Pyspark DataFrame ,如 元组在哪儿?我收到此错误: java.lang.RuntimeException:[1.67]错误:预期“(”,但找到了标识符 这基本上是说它期待的是 ‘(1,2,3)’ 而不是a。问题是由于从另一个作业中提取了值,因此我无法手动将其写入。 在这种情况下,我该如何过滤? 问题答案: 您传递给它的字符串是在SQL环境范围
问题内容: 我通过执行查询得到。这必须传递给 IN 子句值的另一个查询。如何通过 HQL ? 我们可以转换到并且可以通过它,这不是一个问题。 最后,我必须将列表以或或形式传递给 IN 子句。 问题答案: 要么
问题内容: 在SQL中,有什么方法可以缩短语法 到 一次又一次地在子句中写入相同的列名是不可行的。 问题答案: 没有没有办法将LIKE与IN 直接 结合 __ 有很多解决方法,例如本例中的SQL Server 这会将多个OR搜索条件更改为行和JOIN 或者,您可以使用UNION将多个查询合并为一个
问题内容: 关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。 想要改善这个问题吗? 更新问题,使它成为Stack Overflow的主题。 2年前关闭。 改善这个问题 我正在使用大量SQL表在Web应用程序中工作。我需要为每个表创建一个Java bean类。我正在寻找一种可以将SQL表转换为Java Bean类的工具。这将有助于节省时间。 这是一个例子: studentTable(studen
问题内容: 我已经让用户在表中输入需要查询的值列表。该列表可能非常大,并且在编译时长度未知。而不是使用我在想的是,使用临时表并对其执行联接会更有效。我在另一个SO问题中阅读了此建议(目前无法找到,但在编辑时会进行编辑)。 要点是这样的: 如果我有两个同时进行,如果线程2尝试在线程1之后创建TEMP表,我不会收到错误消息吗? 我应该为TEMP表随机生成一个名称吗? 或者,如果我将整个内容包装在交易中
问题内容: 例如,假设你有两个类: 我有一个返回a的方法,List 并且我想将列表中的所有对象都强制转换为,TestB以便最终得到 问题答案: 简单地铸造几乎可行;但这是行不通的,因为你不能将一个参数的泛型类型转换为另一个参数。但是,你可以强制转换中间通配符类型,并且将允许它(因为你可以强制转换为通配符类型或从通配符类型强制转换,只是带有未选中的警告):