维护一个几年前的代码。修改到一个问题,是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个汉字,数据库还有记录 ,这怎么原因呀?
分享到:
相关推荐
NULL 博文链接:https://sxpujs.iteye.com/blog/368960
hibernate注入的三种方式
很多人都对Java在批量数据的处理方面是否是其合适的场所持有怀疑的念头,由此延伸,...下面以Hibernate为例来做为说明,假如我们真的不得不在Java中使用Hibernate来对数据进行批量处理的话。 向数据库插入100 000条数据
解决getHibernateTemplate().save ()不能将数据保存到数据库的问题JusterDu 2016-03-15 08:38:57 1857
在此不讨论两种方案的优劣,我只是写了个hibernate的例子来实现第一种策略.例子很简单,t_user表主要两个字段,name和photo,其中photo字段类型为Blob.在此例中数据库我采用mysql,oracle的Blob字段比较特殊,你...
问题描述 用SpringBoot + Spring Data JPA操作数据库 项目启动的时候 报了一个错 SpringBoot的版本是2.2.6.RELEASE org.springframework.beans.factory.BeanCreationException: Error creating bean with name '...
本人做系统时遇到的一些Hibernate问题及解决方案。
Hibernate JSP Struts 等 多个软件开发中报错处理集锦 对初学者 初开发者 都有很大帮助 希望大家在开发中出错的开一下再下来看一看 应该很有用的
hibernate的各种保存方式的区别
有关hibernate中保存多对一关联关系的进一步分析,很详细的介绍了多对一关系
hibernate 资料hibernate 资料hibernate 资料hibernate 资料
tomcat报错如下,需更换c3p0包 org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.connections.spi.ConnectionProvider] at org.hibernate.service....
hibernate支持的所有数据库方言。用起来很方便。
完整的安装Oracle Weblogic10g R3的一步步说明文档,有图有真象,及默认发布Hibernate程序报错的解决方法说明~~~ 如果此文档不能解决安装中问题,可Email:yu.vivi@qq.com
hibernate3hibernate3hibernate3hibernate3hibernate3hibernate3hibernate3hibernate3
Hibernate对象状态以及各种保存方法的区别
Hibernate 使用缓存时,数据同步问题