【问题标题】:How to join on unnest columns using JPQL?如何使用 JPQL 加入未嵌套的列?
【发布时间】:2023-03-20 12:56:01
【问题描述】:

我有一个简单的查询,我想将其转换为 JPQL / Hibernate。我正在使用 Postgres 14。

select unnest(cast('{hello, world}' as text[]));

真正的查询要复杂一些,会使用新列并将其与现有列连接。

我目前正在使用nativeQuery,但理想情况下我可以摆脱它。所以我尝试了一些方法,但找不到解决方案。

首先我尝试将unnest注册为一个函数。

public class Contributor implements MetadataBuilderContributor {
    @Override
    public void contribute(MetadataBuilder metadataBuilder) {
        metadataBuilder.applySqlFunction(
            "unnest",
            new StandardSQLFunction("unnest", StandardBasicTypes.CHARACTER_ARRAY)
        );
    }
}

但是我得到了错误

antlr.MismatchedTokenException: 期待 CLOSE,发现 '['

cast() 似乎有问题。所以我尝试了一些更简单的方法来检查语法。

@Query("select unnest(:vals)")
List<MyDTO> hello(List<String> vals);

这里我又遇到了一个错误。

org.hibernate.hql.internal.ast.QuerySyntaxException:子树的意外结束

我尝试了更多变体,也尝试了类似 function('unnest', :vals) 的方法,但没有任何效果。

任何想法如何使它工作?非常感谢!

【问题讨论】:

    标签: sql postgresql hibernate jpa jpql


    【解决方案1】:

    我和你有同样的问题,但使用 List&lt;Integer&gt; ,唯一对我有用的解决方案是将 List&lt;Integer&gt; 转换为 String 然后在本机查询中我使用 unnest(string_to_array(:ids,',')\\:\\:integer[])

    【讨论】:

      猜你喜欢
      • 2019-03-19
      • 2019-01-31
      • 1970-01-01
      • 2011-06-08
      • 2021-07-16
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多