如何使用类似字符串HIBERNATE的数组

时间:2019-03-19 02:36:42

标签: java sql database postgresql hibernate

我试图将字符串数组作为参数传递给查询,但出现以下错误

  

错误:运算符不存在:文本~~记录Dica:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。

这是我的查询

select * from table where value  like any (array[?1]);

当我使用休眠模式运行查询时,它就像:

 select * from table where value  like any (array[('%foo%', '%bar%', '%baz%')]);

有一种最好的方法将数组作为参数传递?我认为说数组是动态的很重要,这样我就无法在查询中解决它。

3 个答案:

答案 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即可直接使用最常见的对象数组。不支持并且不应该支持原始数组。