`
deng_1987
  • 浏览: 6066 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

hibernate保存报错,超出长度

阅读更多
  维护一个几年前的代码。修改到一个问题,是hibernat保存的问题
Hibernate用的是2.x.情况是这样的,保存一个实体,报错,说超出最大长度。可是我看数据库这个字段类型varchar2(4000),配置文件长度也够大呀,理论上是不会出现这种问题的。
后来查看了下,有人这样解释的,JDBC在转换过程中对字符串的长度做了限制。这个限制和数据库中字段的实际长度没有关系。而setCharacterStream()方法可以逃过字符转换限制,也就成为了解决此问题的方案之一。JDBC对转换字符长度的限制是为了转换过程中的数据扩展。根据实际测试结果,在ZHS16GBK字符集和 thin驱动下,2000-4000长度的varchar字段都只能插入1333个字节(约666个汉字)。
   故解决PreparedStatement的setString中字符串长度问题可以有两种办法:
   1、使用setCharacterStream()方法;
   2、使用OCI驱动连接Oracle数据库。

后来按这种方法修改还是报错。干脆,傻一下,先令这个字段为"",在Hibernate保存一下,在用sql语言拼接出update语句,这样就保存成功了。
不过在这途中,遇见了个问题,我直接在数据库里修改数据,添加2000个汉字,报处STR绑定值的结尾null字符缺失,但是我用上面的方法都保存了2000个汉字,数据库还有记录 ,这怎么原因呀?
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics