Следует отметить, что WebSphere Application Server не прокси-сервер java.sql.Clob, и кажется маловероятным (хотя и не совсем невозможным), что драйвер Oracle также будет это делать, поэтому я думаю, что Hibernate или, возможно, код, который вызывает Hibernate, построение прокси. Из исключения ясно, что драйвер JDBC Oracle ожидает, что он сможет преобразовать параметр (который по спецификации JDBC должен быть только java.sql.Clob) в oracle.sql.CLOB, который является специфичным для оракула подклассом java.sql. .Клоб. См. https://docs.oracle.com/database/121/JAJDB/oracle/sql/CLOB.html. Похоже, что Oracle также определяет специфичный для поставщика интерфейс специально для приема oracle.sql.CLOB https://docs.oracle.com/database/121/JAJDB/oracle/jdbc/OraclePreparedStatement.html#setCLOB_int__oracle_sql_CLOB_, поэтому кажется неправильным, что драйвер Oracle требует, чтобы Oracle специфический интерфейс oracle.sql.CLOB должен быть предоставлен стандартному методу JDBC java.sql.PreparedStatement.setClob(..., java.sql.Clob). В любом случае, как пользователь, вы мало что можете с этим поделать. Hibernate потенциально может обойти это, создав динамический прокси-сервер для oracle.sql.CLOB, а не для java.sql.Clob, если они еще этого не сделали, поскольку есть еще одна возможность, которая может вызвать эту ошибку. Если у вас есть несколько копий драйвера Oracle между вашим приложением, Hibernate и поставщиком JDBC, определенным на сервере приложений, могут быть две копии класса oracle.sql.CLOB, поступающие из разных загрузчиков классов, так что эти два экземпляра oracle.sql.CLOB несовместимы друг с другом и не смогут выполнить приведение типов. Чтобы проверить, не является ли это причиной, просмотрите свои приложения и конфигурацию провайдера JDBC сервера приложений, общие библиотеки и другие места, где у вас может быть несколько копий драйвера JDBC Oracle (обычно с именем ojdbc*.jar). Если вы найдете несколько, переключитесь на использование только одного и в одном месте. В противном случае проблема, вероятно, находится вне вашего контроля.
Привет. Не могли бы вы отладить и посмотреть, какой объект вы получаете. Если вы получаете java.sql.Clob, вам нужно преобразовать вашу ссылку в java.sql.Clob вместо oracle.sql.CLOB
person
njr
schedule
03.04.2017