Мы пытаемся заполнить объект домена из базы данных oracle 10g. Рассматриваемое поле определяется как строка в объекте домена со следующими ограничениями.
zdata (пусто: ложь, maxSize: 3000000)
Размер данных составляет примерно 70 КБ XML.
Определение таблицы выглядит так:
ZDATA NOT NULL LONG ()
Мы используем сгенерированный grails геттер для доступа к таблице:
reportData = ReportData.get (reportDataId)
При выполнении этого вызова мы получаем исключение с нулевым указателем. Вот часть нашей трассировки стека. java.lang.NullPointerException в java.lang.String. (String.java:176) в oracle.sql.CharacterSet.AL32UTF8ToString (CharacterSet.java:1518) в oracle.jdbc.driver.DBConversion.CharBytesToString (DBConversion.java:610) в oracle.jdbc.driver.DBConversion.CharBytesToString (DBConversion.java:555) в oracle.jdbc.driver.LongAccessor.getString (LongAccessor.java:217) в oracle.jdbc.driver.T4CLongAccessor.getString (T4CLongAccessor.java:426) в oracle.jdbc.driver.OracleResultSetImpl.getString (OracleResultSetImpl.java:403) в oracle.jdbc.driver.OracleResultSet.getString (OracleResultSet.java:1515) в org.apache.commons.dbcp.DelegatingResultSet.getString (DelegatingResultSet.java:224) в org.hibernate.type.StringType.get (StringType.java:18) в org.hibernate.type.NullableType.nullSafeGet (NullableType.java:163) в org.hibernate.type.NullableType.nullSafeGet (NullableType.java:154) в org.hibernate.loader.hql.QueryLoader.getResultColumnOrRow (QueryLoader.java:333) в org.hibernate.loader.Loader.getRowFromResultSet (Loader.java:606) в org.hibernate.loader.Loader.doQuery (Loader.java:701) в org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections (Loader.java:236) в org.hibernate.loader.Loader.doList (Loader.java:2220) в org.hibernate.loader.Loader.listIgnoreQueryCache (Loader.java:2104) в org.hibernate.loader.Loader.list (Loader.java:2099) в org.hibernate.loader.hql.QueryLoader.list (QueryLoader.java:378) в org.hibernate.hql.ast.QueryTranslatorImpl.list (QueryTranslatorImpl.java:338) в org.hibernate.engine.query.HQLQueryPlan.performList (HQLQueryPlan.java:172) в org.hibernate.impl.SessionImpl.list (SessionImpl.java:1121) в org.hibernate.impl.QueryImpl.list (QueryImpl.java:79) в org.codehaus.groovy.grails.orm.hibernate.metaclass.ExecuteQueryPersistentMethod $ 1.doInHibernate (ExecuteQueryPersistentMethod.java:94)
мы используем драйвер Oracle 10.2.0.3.0.




Почему вы используете длинное поле в Oracle? Лонг очень устарел, вам следует использовать клобуку.
Мы не отвечали за схему db. Просто пытаюсь взаимодействовать с ним в том виде, в каком он существует ...
Это известное ограничение драйвера oracle jdbc, которое указано в примечаниях к выпуску для версии 10.2.0.1.0.
Это известное ограничение было исправлено в соответствии с примечаниями к выпуску Oracle JDBC Driver Release 11.1.0.7.0.
Если вы храните XML в Oracle, используйте столбец XmlType, который можно легко преобразовать в CLOB и который прекрасно работает с драйвером JDBC 10g, так как это то, что мы в настоящее время используем в нашей производственной среде.
Похоже, что это может быть известная проблема с oracle, поскольку существует следующая известная ошибка, указанная в примечаниях к выпуску для драйвера oracle 10.2.0.1.0 и 11.1.0.7.0. Я все еще пытаюсь выяснить, есть ли исправление.