我试图将字符串数组作为参数传递给查询,但出现以下错误
错误:运算符不存在:文本~~记录Dica:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。
这是我的查询
select * from table where value like any (array[?1]);
当我使用休眠模式运行查询时,它就像:
select * from table where value like any (array[('%foo%', '%bar%', '%baz%')]);
有一种最好的方法将数组作为参数传递?我认为说数组是动态的很重要,这样我就无法在查询中解决它。
答案 0 :(得分:0)
使用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子句,它不支持%之类的通配符。
答案 1 :(得分:0)
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%'])
答案 2 :(得分:0)
首先,您的语法错误。
代替:
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即可直接使用最常见的对象数组。不支持并且不应该支持原始数组。