【问题标题】:OpenJpa2.0 How to map Oracle sys.XMLTYPE column to StringOpenJpa2.0 如何将 Oracle sys.XMLTYPE 列映射到字符串
【发布时间】:2016-10-10 08:06:28
【问题描述】:

我更改了 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:数字或值错误:字符串缓冲区太小 ORA-06512:在“SYS.XMLTYPE”,第 169 行

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

【问题讨论】:

  • 您正在处理的 XML 有多少个字符?
  • 它是一个超过 4000 个字符的大 xml 文件

标签: oracle11g openjpa websphere-7 ora-01461


【解决方案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 是必要的(在其中一个 cmets 中提到了这一点)。首先,我会使用一组非常小的数据(几个字符),一旦可行,然后尝试 > 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 或域模型是什么样的,所以我必须保持模糊。

谢谢,

希思·托曼

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2011-06-06
    相关资源
    最近更新 更多