使用Oracle 10g长字段填充Grails Domain对象时为空指针

时间:2008-12-04 14:53:08

标签: java hibernate grails oracle10g

我们正在尝试从oracle 10g数据库填充域对象。有问题的字段被定义为域对象中的字符串,具有以下约束。

ZDATA(空白:假,MAXSIZE:3000000)

数据大小约为XML的70K。

表定义如下所示:

ZDATA NOT NULL LONG()

我们正在使用grails生成的getter访问该表:

reportData = ReportData.get(reportDataId)

进行此调用时,我们得到一个空指针异常。这是我们的堆栈跟踪的一部分。 显示java.lang.NullPointerException         在java.lang.String。(String.java:176)         at oracle.sql.CharacterSet.AL32UTF8ToString(CharacterSet.java:1518)         at oracle.jdbc.driver.DBConversion.CharBytesToString(DBConversion.java:610)         at oracle.jdbc.driver.DBConversion.CharBytesToString(DBConversion.java:555)         at oracle.jdbc.driver.LongAccessor.getString(LongAccessor.java:217)         at oracle.jdbc.driver.T4CLongAccessor.getString(T4CLongAccessor.java:426)         at oracle.jdbc.driver.OracleResultSetImpl.getString(OracleResultSetImpl.java:403)         at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:1515)         在org.apache.commons.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:224)         at 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)         at org.codehaus.groovy.grails.orm.hibernate.metaclass.ExecuteQueryPersistentMethod $ 1.doInHibernate(ExecuteQueryPersistentMethod.java:94)

我们使用的是oracle驱动程序10.2.0.3.0。

3 个答案:

答案 0 :(得分:1)

这是版本10.2.0.1.0的发行说明中列出的oracle jdbc驱动程序的已知限制。

根据Oracle JDBC驱动程序版本11.1.0.7.0

的发行说明修复了此已知限制

答案 1 :(得分:0)

为什么在Oracle中使用长字段?很久已经过时,你应该使用clob。

答案 2 :(得分:0)

如果要在Oracle中存储XML,请使用XmlType列,该列可以轻松转换为CLOB并与JDBC 10g驱动程序配合使用,因为这正是我们目前在生产环境中使用的。