简体   繁体   English

Spring JPA 中的 PostgreSQL 数组运算符

[英]PostgreSQL array operatiors in spring JPA

I'm trying to use the array operators such as @> , <@ or $$ .我正在尝试使用数组运算符,例如@><@$$ However I got at the symbolic character @ this my request:但是我得到了符号字符@ this my request:

@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
    );

The error is:错误是:

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]

Thanks in advance提前致谢

Those would work only for native queries.这些仅适用于本机查询。 HQL has no concept of Postgres' array operators, and doesn't provide similar operators of its own since not all databases would support them. HQL 没有 Postgres 数组运算符的概念,并且不提供自己的类似运算符,因为并非所有数据库都支持它们。 So tack on a native = true and rewrite the query in pure SQL instead.因此,使用native = true并改用纯 SQL 重写查询。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM