ORA-12899:列的值太大,即使Exception中的值较小

时间:2013-10-23 10:59:40

标签: java oracle eclipselink varchar2 ora-12899

通过EclipseLink更新数据库中的实体时,我收到ORA-12899错误。例外内容如下:

捕获到RuntimeException:org.springframework.transaction.TransactionSystemException:无法提交JPA事务;嵌套异常是javax.persistence.RollbackException: 异常[EclipseLink-4002](Eclipse Persistence Services - 2.1.1.v20100817-r8050):org.eclipse.persistence.exceptions.DatabaseException 内部异常:java.sql.BatchUpdateException:ORA-12899:值太大而不适用于列“T_MONITORING”。“ VERSION ”(实际:295,最大值:255

错误代码:12899 查询:UpdateObjectQuery(MonitoringBE @ 7e6dc6aeMonitoringBE {id:17b50dcd-3184-4b47-998a-7c3a93a71695,hostname:HOSTNAME,releaseTimestamp:2013-10-17 12:04:01.578,javaVersion:1.6.0_24,softwareVersion:4.0.30.SP401 -RC8,testId:6e1bc90f_549a_46aa_91f2_e9ff8a96ba,版本: PSDZ:4.8.1.0332013 - 20130522-1210; KIS AWL:5.0.0; KIS-WB:[S15A; 0; 0; 32; 2; Mon Oct 07 15:03 :55 CEST 2013; 4556499; 3; Ausleitung zu SAb; 8; 8] ,lastMrtAnswer:2013-10-17 12:45:15.471,serverInstance:MyServer,lastModified:2013-10-17 12:45: 24.088})

列“VERSION”定义为VARCHAR2(255 CHAR)。在这种情况下我的问题是异常中的String不超过255个Chars。怎么可能?异常的输出是错误的吗?更新查询未执行。

BusinessEntity(MonitoringBE)使用setter-methods在plaind java中进行操作。然后在实体管理器(javax.persistence.EntityManager)中调用合并:

getEntityManager().merge( entity )

我正在使用Oracle 11g Enterprise(11.2.0.2.0)和Java 1.6.0.24 Glassfish Server中的EclipseLink 2.1.1。 Oracle中的字符集是AL32UTF8,它应该能够存储所有类型的字符(4字节)。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

如错误“实际:295”中所述

这意味着数据库层的列数为295,请确保查询语法和双引号,逗号等在正确的位置

答案 1 :(得分:0)

我可以使用更新的Eclipselink版本2.5.1重现该行为。例外情况表明属性的参数值正确。也许EclipseLink 2.1.1在这里有不同的行为。 在实体中设置字符串之前截断字符串可以解决问题。