【问题标题】:PostgreSQL array operatiors in spring JPASpring JPA 中的 PostgreSQL 数组运算符
【发布时间】:2020-04-03 18:03:06
【问题描述】:

我正在尝试使用数组运算符,例如 @><@$$。但是我得到了符号字符@ 这是我的要求:

@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]

提前致谢

【问题讨论】:

    标签: java spring-boot spring-data-jpa jpql


    【解决方案1】:

    这些仅适用于本机查询。 HQL 没有 Postgres 的数组运算符的概念,也没有提供自己的类似运算符,因为并非所有数据库都支持它们。所以添加 native = true 并改用纯 SQL 重写查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-22
      • 2017-10-20
      • 1970-01-01
      • 2016-05-27
      • 2014-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多