我正在尝试使用以下代码将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”
答案 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);