0

我更改了 persistence.xml 中的更改我还更改了 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: numeric or value error: string buffer too small ORA-06512: at "SYS.XMLTYPE", line 169

请在不更改 OpenJpa2.0 作为 IBM WebSphere Application Server V7.0 的一部分的情况下建议我如何处理 sys.XMLTYPE 数据,我正在将我的应用程序从 db2 迁移到同一环境中的 Oracle。

4

1 回答 1

1

有时编写 XML 数据可能会很棘手!获得正确的驱动程序和正确定义的事物可能会遇到挑战。鉴于缺乏有关您的域模型等信息,我不能确切地说出您需要做什么,但让我提供一些一般性的东西来寻找。首先,如果您想引用它,OpenJPA 测试框架中有一个 XML 测试。可以在这里公开看到:

https://apache.googlesource.com/openjpa/+/refs/heads/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jdbc/oracle/

或者,使用“XMLValueHandler”的另一个测试(可能这超出了您正在寻找的范围):

https://apache.googlesource.com/openjpa/+/refs/heads/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/query/

其次,(显而易见)我假设您在 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 或域模型是什么样的,所以我必须保持模糊。

谢谢,

希思·托曼

于 2016-10-24T21:34:51.547 回答