Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Hibernate中使用Oracle XMLTYPE_Java_Oracle_Hibernate_Ora 17004 - Fatal编程技术网

Java 如何在Hibernate中使用Oracle XMLTYPE

Java 如何在Hibernate中使用Oracle XMLTYPE,java,oracle,hibernate,ora-17004,Java,Oracle,Hibernate,Ora 17004,其中一列是Oracle数据库中的XMLTYPE类型。 在我的应用程序中,我希望持久化数据并使用Hibernate 为了在hibernate中映射XMLTYPE,我做了以下工作 定义实现UserType的自定义用户类型 自定义用户类型实现基于博客链接- 但是我们没有使用C3p0连接池,而是使用DBCP 在自定义用户类型中创建XMLType时,我遇到了一个问题 XMLType.createXML(st.getConnection(),HibernateXMLType.domToString((Doc

其中一列是Oracle数据库中的XMLTYPE类型。 在我的应用程序中,我希望持久化数据并使用Hibernate

为了在hibernate中映射XMLTYPE,我做了以下工作

  • 定义实现UserType的自定义用户类型

  • 自定义用户类型实现基于博客链接-

  • 但是我们没有使用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");
            }
        }
    

    现在没有线索了……

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

    我将输入数据类型从OracleDB端从XMLtype更改为CLOB,然后在存储过程的第一行轻松地传递CLOB和;我从CLOB构建了一个XMLType


    CLOB在java中非常简单,只需将其用作字符串(
    语句.setString(1,String);

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


    我留下了详细的说明。

    “我还尝试获取getInnermostDelegate,但这也不起作用。”我总是使用getInnermostDelegate();它是有效的。请使用getInnermostDelegate/*Connection oracleConnection=conn发送错误;if(org.apache.commons.dbcp.DelegatingConnection的conn实例){oracleConnection=((org.apache.commons.dbcp.DelegatingConnection)conn.getInnermostDelegate();}*/