如何使用类似的字符串 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 数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在hibernate中更新值数组

Hibernate,PostgreSQL:如何在数组列中搜索

使用 Hibernate 时如何打印带有参数值的查询字符串

Hibernate查询的数据转换成json

如何在 Hibernate 中执行非多态 HQL 查询?

hibernate如何生成外键约束名?