如何使用类似的字符串 HIBERNATE 数组
Posted
技术标签:
【中文标题】如何使用类似的字符串 HIBERNATE 数组【英文标题】:How to using like array of string HIBERNATE 【发布时间】:2019-03-19 02:36:42 【问题描述】:我正在尝试将字符串数组作为参数传递给我的查询,但出现以下错误
错误:运算符不存在:文本~~记录 Dica:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。
这是我的查询
select * from table where value like any (array[?1]);
当我使用休眠运行它时,查询是这样的:
select * from table where value like any (array[('%foo%', '%bar%', '%baz%')]);
有一个最好的方法来传递我的数组作为参数??我认为重要的是要说我的数组是动态的,所以我不能在我的查询中找到它。
【问题讨论】:
【参考方案1】:使用 setParameterList 方法。
String queryStr = "select * from table where value in :valueList";
Query query = SessionFactory.getCurrentSession().createQuery(queryStr);
query.setParameterList("valueList", new Object[]"%foo%","%bar%","%baz%");
请注意,我使用了 in 子句,它不支持 % 等通配符。
【讨论】:
【参考方案2】: 首先使用createNativeQuery
而不是createQuery
,因为语法是PSQL的原生语法。
第二查询语法应为select * from table where value like any (array?1)
,因为?1
将被['%foo%', '%bar%', '%baz%']
替换,因此您的最终查询将匹配所需的PSQL 语法。
select * from table where value like any (array['%foo%', '%bar%', '%baz%'])
【讨论】:
好吧,我已经尝试过你的建议,但我不能使用“...like any (array?1)”,因为我收到错误:错误:在“?”或附近出现语法错误 有些帖子可能对你有帮助...***.com/questions/1647583/…***.com/questions/36601318/…vladmihalcea.com/…【参考方案3】:首先,你的语法是错误的。
代替:
select * from table where value like any (array[?1]);
你应该使用:
select * from table where value like any (:vals);
您不能使用array[?]
或array[:var]
来构造变量。那是无效的语法。
其次,对于 Hibernate 5.2 到 5.4,您只需添加 this dependency 即可直接使用最常见的对象数组。原始数组不受支持,也不应该支持。
【讨论】:
以上是关于如何使用类似的字符串 HIBERNATE 数组的主要内容,如果未能解决你的问题,请参考以下文章