При обновлении с ojdbc6 / jdk6 до ojdbc8 / jdk8 произошел сбой TIMESTAMPTZWrapper.Невозможно привести TIMESTAMPTZWrapper к TIMESTAMPTZ - PullRequest
0 голосов
/ 18 декабря 2018

Недавно мы подняли популярное приложение, написанное под JDK6 с использованием ojdbc6 для базы данных Oracle 11g.Было поднято настроение использовать JDK8 для той же базы данных 11g, но мы также были в процессе обновления до 12c.Поднятый код был запущен в работе с базой данных 11g, но медленнее, чем раньше.В отношении базы данных 12c в нашей среде QA мы замечаем, что задания либо выдают исключения, либо работают ОЧЕНЬ медленно.Когда я посмотрел на код, то заметил, что команде проекта, назначенной для поднятия кода, не удалось обновить ojdbc с 6 до как минимум 8. С тех пор я проделал эту работу, но теперь мы получаем ошибки при отправке следующего кода:

    Calendar endModDate = Calendar.getInstance();

    // get the timestamp from the db
    Query qry = em.createNativeQuery("select SYSTIMESTAMP from dual");
    TIMESTAMPTZWrapper tsTZWrapper = (TIMESTAMPTZWrapper)qry.getSingleResult();

Em - наш менеджер по организации.Но когда код вызывает функцию-член qry.getSingleResult (), мы получаем эту ошибку:

oracle.sql.TIMESTAMPTZ не может быть приведен к org.eclipse.persistence.internal.platform.database.oracle..TIMESTAMPTZWrapper

Я искал ответ "высоко" и "низко", и все, что напоминает ответ, похоже, не исправляет мое решение.Эта та же самая логика используется в одной другой области кода и производит ту же самую проблему.Если мы вернемся к ojdbc6, то он будет работать, но мы не сможем использовать ojdbc6 (и мы действительно не должны, так как мы на jdk8), так как нам нужно перейти на Oracle 12c в следующем месяце.

Спасибо за любую помощь в этом вопросе.

1 Ответ

0 голосов
/ 18 декабря 2018

Просто быстрый комментарий о типе данных TIMESTAMP:

  • В драйверах JDBC есть ошибка "Ошибка 21891493: МАСШТАБА TIMESTAMP ОТПРАВКИ JDBC, КОГДА НАНОСЕКОНДЫ НУЛИ", что может привести к созданию слишком большого числа дочерних элементовкурсоры в базе данных Oracle.Эта ошибка была исправлена ​​в драйверах 12.2 JDBC.
  • Тип данных TIMESTAMP WITH TIMEZONE внутренне использует функцию для преобразования этого значения в GMT.Когда вы создаете индекс для него, в некоторых случаях этот индекс на основе функций не используется, особенно когда вы сравниваете этот столбец со значением TIMESTAMP другого подтипа.Вы должны сравнить планы exec между 11g и 12c.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...