java - Spring JPA 中的 PostgreSQL 数组运算符
问题描述
我正在尝试使用数组运算符,例如@>
,<@
或$$
. 但是我得到了@
我的要求的象征性字符:
@Transactional
@Modifying
@Query(
"update EbOrder o set o.xEbEtablissement= :newEtablissement " +
"where o.xEbEtablissement = (select distinct u.xEbEtablissement" +
"from EbOrder o, EbUser u" +
"where regexp_split_to_array(:listLabels, ',') @> (regexp_split_to_array(o.listLabels,','))" +
"and u.ebUserNum= :userNum and o.xEbEtablissement = :oldEtablissement)"
)
public int updateOrderEtablissementAndLabels(
@Param("userNum") Integer userNum,
@Param("oldEtablissement") EbEtablissement oldEtablissement,
@Param("newEtablissement") EbEtablissement newEtablissement,
@Param("listLabels") String listLabels
);
错误是:
Caused by: org.hibernate.QueryException: unexpected char: '@' [update com.adias.mytowereasy.delivery.model.EbOrder o set o.xEbEtablissement= :newEtablissement where o.xEbEtablissement = (select distinct u.xEbEtablissementfrom EbOrder o, com.adias.mytowereasy.model.EbUser uwhere regexp_split_to_array(:listLabels, ',') @> (regexp_split_to_array(o.listLabels,','))and u.ebUserNum= :userNum and o.xEbEtablissement = :oldEtablissement)]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:235) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:143) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:119) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:153) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
提前致谢
解决方案
这些仅适用于本机查询。HQL 没有 Postgres 的数组运算符的概念,也没有提供自己的类似运算符,因为并非所有数据库都支持它们。因此,native = true
改为使用纯 SQL 重写查询。
推荐阅读
- python - 根据来自其他两列的字符串创建熊猫数据框列
- c# - Unity - 让两个线渲染器交织在一起?
- react-native - 在两个嵌套的 Tab React Native 中重新加载子 Tab
- python - Python:如何重塑 Pandas 数据框并保留信息?
- android - 从字符串创建和显示 SVG
- javascript - javascript toString() 中的不同分隔符
- c# - 如何以同步方式运行异步调用
- docker - 如何在后台运行 jenkins.war 并使用 cli
- java - 等于方法不适用于两个列表比较
- batch-file - 无法使用 bat 文件将整个字符串从 csv 文件打印到文本文件