【发布时间】: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