Java 如何在Hibernate中使用Oracle XMLTYPE
其中一列是Oracle数据库中的XMLTYPE类型。 在我的应用程序中,我希望持久化数据并使用Hibernate 为了在hibernate中映射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
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();}*/