通过 EclipseLink 更新数据库中的实体时出现 ORA-12899 错误。例外情况如下:
RuntimeException 捕获:org.springframework.transaction.TransactionSystemException:无法提交 JPA 事务;嵌套异常是 javax.persistence.RollbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.DatabaseException 内部异常: java.sql.BatchUpdateException: ORA-12899 :对于列“T_MONITORING”的值太大。“版本”(实际:295,最大值:255)
错误代码:12899 查询:UpdateObjectQuery(MonitoringBE@7e6dc6aeMonitoringBE {id:17b50dcd-3184-4b47-998a-7c3a93a71695,主机名:HOSTNAME,releaseTimestamp:2013-10-17 12:04:01.578,javaVersion:1.6.0_24,软件版本:4.0.0_24 .30.SP401-RC8, testId: 6e1bc90f_549a_46aa_91f2_e9ff8a96baef, 版本: PSDZ:4.8.1.0332013 - 20130522-1210;KIS AWL:5.0.0;KIS-WB:[S15A;0;0;32;2;10 月 7 日星期一 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)。在这种情况下,我的问题是异常中的字符串不超过 255 个字符。这个怎么可能?异常的输出是否错误?不执行更新查询。
BusinessEntity (MonitoringBE) 在普通 java 中使用 setter 方法进行操作。然后在实体管理器(javax.persistence.EntityManager)中调用合并:
getEntityManager().merge( entity )
我正在使用来自 Java 1.6.0.24 Glassfish 服务器的 Oracle 11g Enterprise (11.2.0.2.0) 和 EclipseLink 2.1.1。Oracle 中的字符集是 AL32UTF8,它应该能够存储所有类型的字符(4 字节)。
任何人都可以帮忙吗?