ORA-12899: слишком большое значение для столбца, даже если значение в Exception меньше
Я получаю сообщение об ошибке ORA-12899 при обновлении сущностей в БД через EclipseLink. Исключение гласит следующее:
Обнаружено 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, releaseTimestamp: 2013-10-17 12:04:01.578, javaVersion: 1.6.0_:.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; понедельник, 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). Моя проблема в этом случае состоит в том, что строка в исключении не длиннее 255 символов. Как это может быть? Вывод исключения является неправильным? Запрос на обновление не выполняется.
BusinessEntity (MonitoringBE) управляется в обычном Java с использованием методов установки. Затем вызывается объединение в менеджере сущностей (javax.persistence.EntityManager):
getEntityManager().merge( entity )
Я использую Oracle 11g Enterprise (11.2.0.2.0) с EclipseLink 2.1.1 с сервера Java 1.6.0.24 Glassfish. Набор символов в Oracle - AL32UTF8, который должен хранить все типы символов (4 байта).
Кто-нибудь может помочь?
2 ответа
Я мог бы воспроизвести поведение с более новой версией Eclipselink 2.5.1. Исключение указывает правильное значение параметра для атрибута. Возможно EclipseLink 2.1.1 имеет другое поведение здесь. Усечение строки перед ее установкой в сущности решает проблему.
Как упоминалось в ошибке "фактическое: 295"
Что означает слой базы данных, получающий 295 символов для столбца, пожалуйста, убедитесь, что синтаксис запроса и двойные кавычки, запятая и т. Д. В правильном месте