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

转载于:https://www.cnblogs.com/wangfl/p/10521065.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值