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