Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 没有JDBC类型的方言映射:2003_Hibernate_Postgresql - Fatal编程技术网

Hibernate 没有JDBC类型的方言映射:2003

Hibernate 没有JDBC类型的方言映射:2003,hibernate,postgresql,Hibernate,Postgresql,虽然这个标题存在一些问题,但我的查询并没有从这些线程中解决 我在postgres中通过hibernate执行递归(使用with子句)查询,查询结果也包含搜索路径 例:查询结果的一行 5811;"axyz_3_3";"ABC";5782;5811;5797;4;"**{acl_3_3,acl3_4,acl3,acl_3_3}**";t;t hibernate是否为“{acl\u 3\u 3,acl3\u 4,acl3,acl\u 3}”提供了除字符串以外的任何映射类型, 类似于字符数组或字符数组

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

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

例:查询结果的一行

5811;"axyz_3_3";"ABC";5782;5811;5797;4;"**{acl_3_3,acl3_4,acl3,acl_3_3}**";t;t
hibernate是否为“{acl\u 3\u 3,acl3\u 4,acl3,acl\u 3}”提供了除字符串以外的任何映射类型, 类似于
字符数组
字符数组

下面是查询输出的示例

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

原因:org.hibernate.MappingException:没有JDBC类型的方言映射:2003

hibernate没有提供和转换器类/Mapper类来转换DB text[]数据类型, 为此,我们可以编写自己的转换类型实现,也可以使用
addScalar(“路径”,Hibernate.TEXT);我们可以将文本[]映射到文本,然后在java代码中,我们可以将其从“,”中拆分出来。

使用一个包“com.vladmin:hibernate-types-52:2.8.0”,或者将您的数据库方言添加到参考资料中的yml文件中:

@Entity
@TypeDefs({
        @TypeDef(name = "string-array", typeClass = StringArrayType.class),
        @TypeDef(name = "json", typeClass = JsonStringType.class),
        @TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
})
public class Post implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Type(type = "string-array")
    @Column(columnDefinition = "text[]")
    private String[] tags;

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

  • 将依赖项添加到
    pom.xml
  • 应用程序中指定
    postgresql94customdialent
    。属性

  • 解决问题的一种可能性是使用“UNNEST”postgree函数,这可以作为提示:

    SELECT UNNEST({acl_3_3,acl3_4,acl3,acl_3_3})
    

    也许你应该考虑包括这个问题的查询和相关的数据类型?抱歉,但是由于机密问题,我不能提供查询。hibernate是否有java.sql.Types.ARRAY的映射。如果无法显示真实的查询,请生成一个可以显示的示例,或者至少提供一个问题的合理描述。我猜对了吗?你的问题应该是“我如何在Hibernate中读写PostgreSQL数组,比如
    text[]
    ?”。您尚未显示查询、错误消息、代码等。很抱歉给您带来不便,您的猜测是正确的,下面是查询格式Read,如何?将
    文本[]
    放在
    用户类型中的何处?你能举个例子吗?相关:你也可以在SQL查询中放置一个cast来转换数组
    ,例如,选择cast(text\u array\u col as text)
    ,然后解析它,当你显式指定类型定义时,这会有所帮助,但我不确定如何“激活”使用session.createNativeQuery()创建的特殊查询上的类型定义@即使我面临着和你描述的一样的挑战。我在hibernate类型项目中发现了一个提示,它一定是可能的。但是我没有设法使它与
    @ColumnResult
    中给出的类型一起工作,即
    String[].class
    。但是,对我来说,如果我将类型定义为
    StringArrayList.class
    ,它就可以工作。但这对二维数组不起作用。可能需要一些特定的设置。这里不需要super()-它由defaultYes调用!但您可能有兴趣知道,这种模式可以在hibernate核心本身的许多地方找到,例如:和
    spring.jpa.properties.hibernate.dialect=com.package.name.PostgreSQL94CustomDialect
    
    SELECT UNNEST({acl_3_3,acl3_4,acl3,acl_3_3})