如何获取用于将JGeometry存储到Oracle DB的OracleConnection

时间:2018-11-14 13:42:58

标签: java oracle hibernate exception

我正在尝试使用以下代码将JGeometry存储到Oracle数据库:

@PersistenceContext
private EntityManager entityManager;

...

    Session session = entityManager.unwrap(Session.class);
    session.doWork(new Work() {

        @Override
        public void execute(Connection connection) throws SQLException {

            PreparedStatement ps = connection.prepareStatement("UPDATE SAMPLE_AREA SET GEOMETRY=? WHERE ID = " + sampleAreaId + " AND SAMPLE_ID = " + sampleId);
            System.out.println(connection); // prints: org.hibernate.engine.jdbc.internal.proxy.ConnectionProxyHandler@321ca777[valid=true]
            System.out.println(connection.getClass().getName()); // prints: com.sun.proxy.$Proxy125 
            STRUCT obj = JGeometry.store(jGeometry, connection);
            ps.setObject(1, obj);
            ps.execute();

        }
    });

我收到java.lang.ClassCastException:com.sun.proxy。$ Proxy125无法在调用JGeometry.store时强制转换为oracle.jdbc.OracleConnection。

如何获取OracleConnection?

我正在使用“ hibernate.dialect = org.hibernate.dialect.Oracle10gDialect”

1 个答案:

答案 0 :(得分:0)

我想出了解决方案。与其使用Connection作为JGeometry.store的参数,还需要使用OracleConnection。可以从Connection中解包。我想我以前曾经尝试过,但是很可能我导入错误,正确的是oracle.jdbc.OracleConnection。

import oracle.jdbc.OracleConnection;
...
OracleConnection oracleConnection = connection.unwrap( OracleConnection.class );
STRUCT obj = JGeometry.store(jGeometry, oracleConnection);