JDBC 类型没有方言映射:2003

Sti*_*ler 8 postgresql hibernate

虽然这个标题存在一些问题,但我的查询没有从这些线程中解决。

我在 postgres 中通过 hibernate 执行递归(使用 with 子句)查询,查询的结果也包含搜索路径

例如:一行查询结果

5811;"axyz_3_3";"ABC";5782;5811;5797;4;"**{acl_3_3,acl3_4,acl3,acl_3_3}**";t;t
Run Code Online (Sandbox Code Playgroud)

hibernate 是否有"{acl_3_3,acl3_4,acl3,acl_3_3}"除 String 之外的任何映射类型,类似于CHARACTER_ARRAYCHAR_ARRAY

以下是查询输出的示例

id   |name|discri|pId|asscID|immeId|depth|path|cycle|canDelete
5797;"abc3";"abc";5782;5811;5788;7;"{abc_3_3,abc3_4,abc3,abc4}";t;f
5797;"abc3";"abc";5782;5786;5813;6;"{abc1,abc2,abc3,abc3}";t;f
5799;"abc4";"abc";5782;5811;5786;6;"{abc_3_3,abc3_4,abc4}";t;f
5788;"abc2";"abc";5782;5811;5786;6;"{abc_3_3,abc3_4,abc2}";f;f
5786;"abc1";"abc";5782;5786;5799;5;"{abc1,abc2,abc3,abc1}";t;f
5797;"abc3";"abc";5782;5786;5813;5;"{abc1,abc2,abc3,abc3}";t;f
5813;"abc3_4";"abc";5782;5786;5811;5;"{abc1,abc2,abc3_4}";f;f
5786;"abc1";"abc";5782;5811;5799;5;"{abc_3_3,abc4,abc1}";f;f
5813;"abc3_4";"abc";5782;5811;5797;4;"{abc3_4,abc3,abc3_4}";t;f
5811;"abc_3_3";"abc";5782;5811;5797;4;"{abc_3_3,abc3,abc_3_3}";t;t
5799;"abc4";"abc";5782;5811;5797;4;"{abc3,abc4}";f;f
Run Code Online (Sandbox Code Playgroud)

Hibernate 抛出以下异常

Caused by: com.vik.prod.service.UnidentifiedException: No Dialect mapping for JDBC type: 2003
at com.vik.prod.service.ServiceExecutorUtils.execute(ServiceExecutorUtils.java:93)
at com.vik.prod.service.ServerServiceExecutor.execute(ServerServiceExecutor.java:76)
at com.vik.prod.service.ClientDelegate.execute(ClientDelegate.java:197)
... 33 more
Run Code Online (Sandbox Code Playgroud)

引起:org.hibernate.MappingException:JDBC 类型没有方言映射:2003

小智 14

这就是我在 SpringBoot 中解决问题的方法:

  1. 添加依赖项pom.xml
        <dependency>
            <groupId>com.vladmihalcea</groupId>
            <artifactId>hibernate-types-52</artifactId>
            <version>2.11.1</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)
  1. 按如下方式扩展您的 Hybernate Dialect:
        <dependency>
            <groupId>com.vladmihalcea</groupId>
            <artifactId>hibernate-types-52</artifactId>
            <version>2.11.1</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)
  1. 指定PostgreSQL94CustomDialectapplication.properties
spring.jpa.properties.hibernate.dialect=com.package.name.PostgreSQL94CustomDialect
Run Code Online (Sandbox Code Playgroud)

  • 在 PostgreSQL 数据库上使用“ARRAY_AGG”时完美运行。 (2认同)

Sti*_*ler 2

Hibernate 不提供 Converter 类/Mapper 类来转换 DB text[] 数据类型,为此我们可以编写自己的转换类型来实现UserType或使用 sqlQuery.addScalar( "path", Hibernate.TEXT ); 我们可以将 text[] 映射到文本,然后在 java 代码中我们可以将它从 ',' 中分割出来