Как получить OracleConnection для хранения JGeometry в Oracle DB - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь сохранить 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 не может быть приведен к oracle.jdbc.OracleConnection при вызове JGeometry.store.

Как получить OracleConnection?

Я использую "hibernate.dialect = org.hibernate.dialect.Oracle10gDialect "

1 Ответ

0 голосов
/ 16 ноября 2018

Я разобрался с решением. Вместо использования Connection в качестве параметра JGeometry.store необходимо использовать OracleConnection. Это может быть развернуто из соединения. Я думаю, что пытался сделать это раньше, но, скорее всего, у меня был неправильный импорт, правильным является oracle.jdbc.OracleConnection.

import oracle.jdbc.OracleConnection;
...
OracleConnection oracleConnection = connection.unwrap( OracleConnection.class );
STRUCT obj = JGeometry.store(jGeometry, oracleConnection);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...