3

其中一列是 Oracle 数据库中的 XMLTYPE 类型。在我的应用程序中,我想保留数据并使用 Hibernate。

我为在休眠中映射 XMLTYPE 做了以下操作

  1. 定义实现 UserType 的自定义用户类型

  2. 自定义用户类型实现基于博客链接 - http://community.jboss.org/wiki/MappingOracleXmlTypetoDocument

  3. ut 我们没有使用 C3p0 连接池,而是使用 DBCP

在自定义用户类型中创建 XMLType 时遇到问题

XMLType.createXML(st.getConnection(),HibernateXMLType.domToString((Document) value));

其中 st 是传递给方法的preparedStatement。

st.getConnection() 返回的连接对象是 org.apache.commons.dbcp.PoolableConnection 类型

但是 createXML 方法只需要 oracle.jdbc.OracleConnection 类型的连接对象

我也尝试获取 getInnermostDelegate 但这也不起作用。

XMLTYPE 创建方法在包含的 jar xdb.jar 中 - 是否会根据包含的版本进行任何更改?

谢谢

++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++

使用以下代码获取 SQLConnection 对象-

SimpleNativeJdbcExtractor extractor = new SimpleNativeJdbcExtractor();
PoolableConnection poolableConnection = (PoolableConnection) extractor
                .getNativeConnection(st.getConnection());
Connection sqlConnection = poolableConnection.getInnermostDelegate();

现在,错误消息是java.sql.SQLException: Invalid column type

下面是覆盖的方法

public void nullSafeSet(PreparedStatement st, Object value, int index)
            throws HibernateException, SQLException {

        SimpleNativeJdbcExtractor extractor = new SimpleNativeJdbcExtractor();
        PoolableConnection poolableConnection = (PoolableConnection) extractor
                .getNativeConnection(st.getConnection());
        Connection sqlConnection = poolableConnection.getInnermostDelegate();

        try {
            XMLType xmlType = null;
            if (value != null) {
                xmlType.createXML(sqlConnection, HibernateXMLType
                        .domToString((Document) value));

            }
            st.setObject(index, xmlType);
        } catch (Exception e) {
            e.printStackTrace();
            throw new SQLException(
                    "Could not convert Document to String for storage");
        }
    }

现在一无所知...

4

2 回答 2

0

我解决了同样的问题,但将 XMLType 列映射到我的实体中的 java.lang.String,这简化了解决方案。

我留下了一个详细的分步解决方案作为另一个问题的答案

于 2013-08-16T21:08:41.503 回答
0

我在使用 java 中的 XMLType 时遇到了很多问题,我解决了这个问题是一种非常简单的方法。

我从 oracle DB 端更改了输入数据类型,从 XMLtype 更改为 CLOB,然后我很容易地通过 CLOB 并在存储过程的第一行;我从 CLOB 构建了一个 XMLType。

CLOB 在 java 中非常简单,只需将其用作 String ( statement.setString(1, string);)

于 2012-12-30T08:13:13.467 回答