【问题标题】:JPA reading XMLTYPE results in NullPointerJPA 读取 XMLTYPE 结果为 NullPointer
【发布时间】:2015-11-11 15:50:12
【问题描述】:

您好,我已经在 eclipselink 网站上将此作为错误提交,但到目前为止没有任何回复,我被卡住了。我希望有人知道解决方法或其他东西。 我得到了一个与其他表没有关系的实体。该实体正在映射 oracle 数据库中的现有表。

@Entity
@Table(name = "FIVERX_MUSTER16_PRUEFUNG")
@Customizer(XMLTypeAttributeCustomizer.class)
public class MYDATATABLE {

    ...
    @Lob
    @Column(name = "XML", columnDefinition = "XMLTYPE")
    private String xmlDocument;

    ...
}

我尝试了很多东西,但每次我尝试在此表上进行选择时,eclipselink 都会抛出 NullPointerException

ERROR - EjbTransactionUtil.handleSystemException: null
java.lang.NullPointerException
    at oracle.jdbc.driver.NamedTypeAccessor.getOracleObject(NamedTypeAccessor.java:302)
    at oracle.jdbc.driver.NamedTypeAccessor.getObject(NamedTypeAccessor.java:164)
    at oracle.jdbc.driver.NamedTypeAccessor.getObject(NamedTypeAccessor.java:121)
    at oracle.jdbc.driver.OracleResultSetImpl.getObject(OracleResultSetImpl.java:1108)
    at org.eclipse.persistence.platform.database.oracle.Oracle9Platform.getObjectFromResultSet(Oracle9Platform.java:193)
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.getObject(DatabaseAccessor.java:1302)
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.fetchRow(DatabaseAccessor.java:1077)
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.processResultSet(DatabaseAccessor.java:744)
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:657)
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:560)

如果我删除 xmltype 列,一切都会按预期工作。如果我再次添加该列 -> NullPointer...

这是我的 XmlMapper,因此您可以看到我完全按照 DirectXmlTypeMapping 教程中的说明进行操作

import org.eclipse.persistence.config.DescriptorCustomizer;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.mappings.xdb.DirectToXMLTypeMapping;


public class XMLTypeAttributeCustomizer implements DescriptorCustomizer {

@Override
public void customize (ClassDescriptor descriptor) throws Exception {
    // Remove JPA default Basic mapping
    descriptor.removeMappingForAttributeName("xmlDocument");
    final DirectToXMLTypeMapping mapping = new DirectToXMLTypeMapping();
    mapping.setAttributeName("xmlDocument");
    mapping.setFieldName("XML");
    mapping.getField().setColumnDefinition("XMLTYPE");
    descriptor.addMapping(mapping);
}

}

有什么解决方法吗?我必须使用这个表,它不是唯一一个包含 XMLTYPE 列的表......我在这里完全没有想法......

【问题讨论】:

  • 在各种情况下,关于这个问题的讨论各不相同。一个建议的解决方案似乎是回滚到旧版本的 Oracle JDBC 驱动程序。 google.co.uk/…
  • 您在删除 xmltype 列时提到一切正常,您指的是 lob 和列注释,还是自定义程序等所有内容?您如何指定它以便调用自定义程序?
  • 我的意思是如果我删除该字段。带有所有注释的变量本身。定制器也被定义为调用。 sysouts 已经证明了这一点。当我删除 xml 字段时,我并没有尝试将定制器留在课堂上

标签: java jpa eclipselink


【解决方案1】:

问题是 oracle jdbc 驱动程序中的一个错误。该问题已在 11.2.0.4 版本中修复

【讨论】:

    猜你喜欢
    • 2016-06-29
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多