hibernate保存报错,超出长度

维护一个几年前的代码。修改到一个问题,是hibernat保存的问题
Hibernate用的是2.x.情况是这样的,保存一个实体,报错,说超出最大长度。可是我看数据库这个字段类型varchar2(4000),配置文件长度也够大呀,理论上是不会出现这种问题的。
后来查看了下,有人这样解释的,[color=red]JDBC在转换过程中对字符串的长度做了限制。这个限制和数据库中字段的实际长度没有关系。而setCharacterStream()方法可以逃过字符转换限制,也就成为了解决此问题的方案之一。JDBC对转换字符长度的限制是为了转换过程中的数据扩展。根据实际测试结果,在ZHS16GBK字符集和 thin驱动下,2000-4000长度的varchar字段都只能插入1333个字节(约666个汉字)。
故解决PreparedStatement的setString中字符串长度问题可以有两种办法:
1、使用setCharacterStream()方法;
2、使用OCI驱动连接Oracle数据库。[/color]
后来按这种方法修改还是报错。干脆,傻一下,先令这个字段为"",在Hibernate保存一下,在用sql语言拼接出update语句,这样就保存成功了。
不过在这途中,遇见了个问题,我直接在数据库里修改数据,添加2000个汉字,报处STR绑定值的结尾null字符缺失,但是我用上面的方法都保存了2000个汉字,数据库还有记录 ,这怎么原因呀?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值