【问题标题】:Native Query with array in JPAJPA中带有数组的本机查询
【发布时间】:2020-09-05 14:19:36
【问题描述】:

我想进行查询验证 Postgres 中包含的数组中的值。我在 JPA 中做了一个 nativeQuery,查询显然是正确的,并且在 DBeaver(DBM) 中工作,但在 java 应用程序中没有。

,

    ERROR: operator does not exist: integer[] @> character varying
    TIP: No operator matches the name and type of the argument. You need to add explicit type conversions.

【问题讨论】:

    标签: java postgresql hibernate jpa nativequery


    【解决方案1】:

    AFAIK 这在本机查询中不受支持,因为它们直接委托给不支持它的 JDBC 驱动程序。

    当您像这样使用 JPQL 时:

    var query = em.createQuery("select p from Person p where p.name in :names", Person.class);
    query.bind("names", List.of("A", "B");
    

    然后检查生成的原生 SQL,然后你会看到,生成的 SQL 看起来是这样的:

    select .. from person where person.name in (?, ?)
    

    在您的情况下,我担心您将不得不使用以下内容动态生成查询:

    var entries = List.of("A","B");
    var sql = new StringBuilder("select ... from person where person.name in (");
    for (var i=0; i<entries.size(); i++) {
        sql.append('?');
        if (i<entries.size()-1) sql.append(',');
    }
    sql.append(')');
    var query = em.createNativeQuery(sql.toString());
    for (var i=0; i<entries.size(); i++) {
        query.setParameter(i+1, entries.get(i));
    }
    

    【讨论】:

      猜你喜欢
      • 2019-04-15
      • 2020-02-19
      • 2018-05-27
      • 2017-04-21
      • 2018-09-05
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 2016-11-02
      相关资源
      最近更新 更多