我在persistence.xml中更改了Change 我还更改了xml字段的列定义(columnDefinition =“XDB.XMLType”)
我检查了OpenJpa(http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-td6208344.html)网站和IBM(http://www.ibm.com/support/knowledgecenter/SS7J6S_7.5.0/com.ibm.wsadapters.jca.jdbc.doc/env/doc/rjdb_problemsolutions.html)
我的环境是OpenJpa 2.0和WAS 7
抛出异常 org.apache.openjpa.persistence.PersistenceException:ORA-06502:PL / SQL:数字或值错误:字符串缓冲区太小 ORA-06512:在“SYS.XMLTYPE”,第169行
请不要将OpenJpa2.0作为IBM WebSphere Application Server V7.0的一部分进行建议,如何处理sys.XMLTYPE数据,我将我的应用程序从db2迁移到同一环境中的Oracle。
答案 0 :(得分:1)
编写XML数据有时会很棘手!正确定义正确的驱动程序和事物可能会遇到挑战。鉴于你的域名模型缺乏信息,我不能确切地说你需要做什么,但是让我给出一些一般性的东西来寻找。首先,如果您想参考它,OpenJPA测试框架中有一个XML测试。它可以在这里公开看到:
或者,另一个使用“XMLValueHandler”的测试(可能这超出了您所寻找的范围):
其次,(陈述显而易见的)我假设你在Oracle中有一个列定义为“XMLTYPE”。另外,我看到你正在使用模式SYS。我确定你知道但这是一个系统/管理模式......只是出于理智的缘故,你可能希望首先使用非系统/管理模式运行,这样我们就不会挂断与您的OpenJPA客户端没有正确权限的任何问题。
接下来,您需要以下定义:
@Lob @Basic
@Column(name = "ANXMLCOLUMN", columnDefinition="XMLCOLUMN XMLType")
private String anXMLString;
如果您使用的数据超过4000个字符,我认为@Lob是必要的(这在其中一条评论中提到过)。首先,我会使用一小组数据(几个字符),一旦有效,然后使用>进行实验。 4K。
接下来,请确保使用正确的JDBC驱动程序。我最后一次尝试使用XMLType时使用了Oracle JDBC 11.2.0.2驱动程序。
最后,您可能需要使用值为“oracle(supportsSetClob = true,maxEmbeddedClobSize = -1)”的属性“openjpa.jdbc.DBDictionary”。再次尝试使用此功能并查看有关这些属性的OpenJPA文档,以确定它们是否在您的方案中是必需的。我认为supportsSetClob = true只对OpenJPA的旧版本(2.2.x之前版本)是必需的。您可能还需要使用值为“native”的属性“openjpa.jdbc.SchemaFactory”。我建议你首先尝试没有这两个或这两个属性。如果这没有帮助,那么试验这两个属性。我知道这很模糊,但我不知道您的DDL或域模型是什么样的,所以我必须保持模糊。
谢谢,
Heath Thomann