Приведение java.sql.Connection к com.mysql.jdbc.Connection - PullRequest
3 голосов
/ 21 декабря 2011

Моя база данных использует MySQL, и я использую hibernate в качестве среды ORM.У меня есть один экземпляр, где мне нужно получить доступ к объекту MySQL Connection.Я использую следующий код для получения объекта java.sql.Connection:

getHibernateTemplate().getSessionFactory().getCurrentSession().connection();

Однако, когда я пытаюсь привести его к объекту (com.mysql.jdbc.Connection), я получаю следующее исключение:

java.lang.ClassCastException: $Proxy50 cannot be cast to com.mysql.jdbc.Connection

Странно, если я сделаю conn.getClass().getName(), типом возвращаемого класса будет «$ Proxy50», а не «java.sql.Connection» или какой-либо другой значимый тип.

Какой правильный метод для полученияконкретный Connection объект от Hibernate?(Я пытаюсь прочитать системное свойство MySQL).Почему мой пример не работает?

Ответы [ 3 ]

1 голос
/ 21 декабря 2011

Как правило, вам не нужно обращаться к конкретной реализации Connection.

Но если вам действительно, действительно нужно, вот объяснение: $ Proxy40 означает, что это динамический прокси JDK.Весна стремится создать это.Если ваш был создан Spring, то вы можете получить реальный объект следующим образом:

Advised advised = (Advised) connection;
Connection conn = (Connection) advised.getTargetSource().getTarget();

Если spring не участвует в прокси, вы можете вызвать Connection.unwrap(..), как предложил BalusC (вам следуетбыть в состоянии в любом случае)

0 голосов
/ 21 декабря 2011

com.mysql.jdbc.Connection реализует java.sql.Connection интерфейс.Поэтому при создании com.mysql.jdbc.Connection объект также java.sql.Connection объект.Таким образом, вы не можете выполнить операцию там, потому что возвращаемый объект - java.sql.Connection, а не com.mysql.jdbc.Connection.

0 голосов
/ 21 декабря 2011

Каков правильный способ получения объекта подключения, специфичного для поставщика, из Hibernate?

Это зависит.

Я успешно развернул прокси, как этот. Как распаковать оригинальный объект из динамического прокси

Хотя это страшные вещи, избегайте этого, если можете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...