found [bpchar (Types#CHAR)], but expecting [varchar(255) (Types#VARCHAR)] 问题解决历程

因为某个Java软件在不同的项目上要连接不同厂家的数据库,所以使用的hibernate。之前在各个项目上都用的挺好的,连接过sqlserver,oracle,mysql,国产达梦数据库等。

直至最近,某个项目要求使用国产人大金仓数据库,查了官方文档后,引入相关jar包,更改好hibernate配置文件。一运行,结果报这个错。然后就开始了曲折的解决bug的路程。

首先,根据报错能判断到是程序里实体类的数据类型跟数据库对应列的数据类型不一致,数据库是char(),实体类里使用的是String,在网上查到,需要在map文件里加上type="char"..按文件里说的加上。是不报错了。 结果,在执行查询的时候,又开始报另一个错“java.lang.String cannot be cast to java.lang.Character”。

查看报错堆栈,打断点,进入hibernate的jar包内部,发现是之前报错的字段的值作为查询条件传给数据库时报的错。

然后又是各种搜索,chatgpt都用上了,查到了各种办法,有更改map文件type类型的,有重写方言包的,一一试过之后,发现都不管用。

然后,偶然间,在查看hibernate配置文件时,发现一条没注意过的配置,之前也没写过这条配置,应该是从人大金仓官方样例中拷贝过来的:

<property name="hbm2ddl.auto">validate</property>

好奇心驱使下,查了它的意义,原来是验证hibernate配置信息与数据库中的表同步的设置。然后想到之前断点进入方言包的时候,看到人大金仓的方言包里已经对char()类型做了转换,所以就算不验证,应该也是可以用的,验证的话,反而通不过,因为string确实是对应varchar类型,跟char()类型是不对应的。于是我打算将验证关掉试试。将那条配置改为如下:

<property name="hbm2ddl.auto">none</property>

然后,去掉之前在map文件里添加的type="char"配置。

然后,大功告成。

此次bug还是由于对hibernate了解不全面,以至于解决的路程比较曲折,花了我一晚上时间。希望能对遇到同样问题的同仁们有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
foundfound[nfound[nvarcharfound[nvarchar2found[nvarchar2(Tfound[nvarchar2(Typesfound[nvarchar2(Types)]found[nvarchar2(Types)]是found[nvarchar2(Types)]是指found[nvarchar2(Types)]是指在found[nvarchar2(Types)]是指在Oraclefound[nvarchar2(Types)]是指在Oracle数据库found[nvarchar2(Types)]是指在Oracle数据库中found[nvarchar2(Types)]是指在Oracle数据库中定义found[nvarchar2(Types)]是指在Oracle数据库中定义的found[nvarchar2(Types)]是指在Oracle数据库中定义的一found[nvarchar2(Types)]是指在Oracle数据库中定义的一种found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarcharfound[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,nfound[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicodefound[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varcharfound[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCIIfound[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicodefound[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为400found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000字found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000字节found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000字节。found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000字节。在found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000字节。在Oraclefound[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000字节。在Oracle数据库found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000字节。在Oracle数据库中found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000字节。在Oracle数据库中,found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000字节。在Oracle数据库中,nvarcharfound[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000字节。在Oracle数据库中,nvarchar2found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000字节。在Oracle数据库中,nvarchar2和found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000字节。在Oracle数据库中,nvarchar2和varcharfound[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000字节。在Oracle数据库中,nvarchar2和varchar2found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000字节。在Oracle数据库中,nvarchar2和varchar2是found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000字节。在Oracle数据库中,nvarchar2和varchar2是最found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000字节。在Oracle数据库中,nvarchar2和varchar2是最常found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000字节。在Oracle数据库中,nvarchar2和varchar2是最常用found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000字节。在Oracle数据库中,nvarchar2和varchar2是最常用的found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000字节。在Oracle数据库中,nvarchar2和varchar2是最常用的字符串found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000字节。在Oracle数据库中,nvarchar2和varchar2是最常用的字符串类型found[nvarchar2(Types)]是指在Oracle数据库中定义的一种数据类型。nvarchar2表示该数据类型为可变长度字符串类型,n表示该字符串类型采用Unicode编码,而varchar2则表示采用ASCII编码。该数据类型用于存储长度不确定的unicode字符串,最大长度为4000字节。在Oracle数据库中,nvarchar2和varchar2是最常用的字符串类型。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值