zoukankan      html  css  js  c++  java
  • oracle数据库与hibernate方言转型异常

    oracle数据库与hibernate方言转型异常

    报错信息:

    org.hibernate.MappingException: No Dialect mapping for JDBC type: -9

    报错原因:

    数据库中的一些表使用了nvarchar2字段类型导致;

    Hibernate框架的方言(Dialect)没有数据库中数据类型nvarchar的映射,只有varchar类型的映射。所以在类型转换时出现此异常。

    涉及表范围:

    DM_DT_INTERPROFESSION_NOTICE

    DM_DT_SRCTASKVERSION_MSG

    DM_DT_TASK_BIND_ENGINEER

    PM_TASK_BIND_ENGINEER

    nvarchar2和varchar2区别:

    varchar(n)

    长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。

    nvarchar(n)

    包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 4,000 之间。字节的存储大小是所输入字符个数的两倍。

     

    一般储存英文需要一个字节但汉字需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。

     

    最终解决方案

    在oracle配置文件里找到数据库方言的配置路径

     

    2.在数据库方言配置类里重写Oracle10gDialect顶级父类org.hibernate.dialect里的registerHibernateType(数据库类型code,数据类型)方法

    例如registerHibernateType(“-9”,“String”)

    被重写的方法

     

    可以看到Dialect类里没有对code为-9的转换定义

     

    参考

    https://blog.csdn.net/tender001/article/details/7716178

  • 相关阅读:
    SQL Server ->> Database Snapshot(数据块快照)
    SQL Server ->> Sparse File(稀疏文件)
    Linux ->> Sudo命令
    Linux ->> mkdir命令
    Linux ->> VMWare Workstation虚拟机里的UBuntu系统安装VMWare-tools
    Microsoft Office ->> 完整卸载Office 2007
    SQL Server ->> XML方法
    SQL Server ->> 更改服务器时区对SQL Server Agent服务器的影响
    分析java内存情况
    oracle 10g 11g 12c区别
  • 原文地址:https://www.cnblogs.com/wangfl/p/10521065.html
Copyright © 2011-2022 走看看