hibernate 写数据库时发生异常“ORACLE:数据大小超出此类型的最大值: 1024”
在 oracle 9i上有这个问题 ,在oracle10g上就没有这个问题了。两个版本在这项限制上有区别吗?表中有两个字段定义为 varchar2(4000),存放的是固定长度为1024的字符串。java.sql.SQLException: ORACLEata size bigger than max size for this type: 1024
at org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter.reFactorException(OracleExceptionSorter.java:54)
at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.refactorException(LocalManagedConnectionFactory.java:842)
at org.jboss.resource.adapter.jdbc.local.LocalManagedConnection.refactorException(LocalManagedConnection.java:672)
at org.jboss.resource.adapter.jdbc.local.LocalConnection.checkException(LocalConnection.java:919)
at org.jboss.resource.adapter.jdbc.local.LocalStatement.checkException(LocalStatement.java:780)
at org.jboss.resource.adapter.jdbc.local.LocalPreparedStatement.setString(LocalPreparedStatement.java:410)
at org.hibernate.type.StringType.set(StringType.java:26)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:131)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:108)
at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2002)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2248)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2665)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:56)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
中文环境下报错是 Caused by: java.sql.SQLException: ORACLE:数据大小超出此类型的最大值: 1024;
网上有些资料表明是jdbc驱动的问题,但是我换了oracle 10.2.0.2 的驱动 文件Ojdbc14.jar(1.46 MB (1,540,457 字节)) 的也是无济于事,感觉还是数据库版本不同会有差别,oracle10就没有这个问题 。
在 oracle 9i上有这个问题 ,在oracle10g上就没有这个问题了。两个版本在这项限制上有区别吗?表中有两个字段定义为 varchar2(4000),存放的是固定长度为1024的字符串。java.sql.SQLException: ORACLEata size bigger than max size for this type: 1024
at org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter.reFactorException(OracleExceptionSorter.java:54)
at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.refactorException(LocalManagedConnectionFactory.java:842)
at org.jboss.resource.adapter.jdbc.local.LocalManagedConnection.refactorException(LocalManagedConnection.java:672)
at org.jboss.resource.adapter.jdbc.local.LocalConnection.checkException(LocalConnection.java:919)
at org.jboss.resource.adapter.jdbc.local.LocalStatement.checkException(LocalStatement.java:780)
at org.jboss.resource.adapter.jdbc.local.LocalPreparedStatement.setString(LocalPreparedStatement.java:410)
at org.hibernate.type.StringType.set(StringType.java:26)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:131)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:108)
at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2002)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2248)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2665)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:56)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
中文环境下报错是 Caused by: java.sql.SQLException: ORACLE:数据大小超出此类型的最大值: 1024;
网上有些资料表明是jdbc驱动的问题,但是我换了oracle 10.2.0.2 的驱动 文件Ojdbc14.jar(1.46 MB (1,540,457 字节)) 的也是无济于事,感觉还是数据库版本不同会有差别,oracle10就没有这个问题 。
或者就是将该字段宽度在扩大
我的运行环境中没有classes12.jar,只有Ojbdc14.jar.
我试了以下几种方案都无效:
1、我删除 ojdbc14.jar ,增加classes12.jar。
2、ojdbc14.jar,classes12.jar 共存。我分析还是数据库的问题,因为一样的驱动,链接oracle10g时没有问题,链接 oracle9i 就有问题。
具体原因不详。我存储的是 16进制字符串,也就是说都是数字和英文字母,长度固定为1024,字段定义成varchar2(4000),无论如何也不会超过限制 。
不知道我这样的理解对不对