Я пытаюсь получить объект Connection
в спящем режиме, когда используется SessionFactory.getCurrentSession()
.Получить объект Connection при использовании SessionFactory.getCurrentSession() в Hibernate
Исходный код
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.internal.SessionImpl;
public class SOExample {
public static void main(String[] args) throws SQLException {
Configuration configuration = new Configuration();
SessionFactory sessionFactory = configuration.buildSessionFactory(new StandardServiceRegistryBuilder().configure().build());
Session session = sessionFactory.getCurrentSession();
Connection connection = ((SessionImpl) session).connection();
// doing operation on connection object as per my requirement
DatabaseMetaData databaseMetaData = connection.getMetaData();
System.out.println(databaseMetaData.getDatabaseProductName());
}
}
StackTrace
Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy24 cannot be cast to org.hibernate.internal.SessionImpl
at com.SOExample.main(SOExample.java:20)
getCurrentSession()
дает Proxy
объект Session
так Он не может бросить его SessionImpl
так, что есть другие способы, чтобы получить Connection
объект , Или Как SessionImpl
от объекта прокси.
Другой вариант я пробовал, но это говорит getConnectionProvider()
метод не найден.
SessionFactoryImplementor sessionFactoryImplementation = (SessionFactoryImplementor) session.getSessionFactory();
ConnectionProvider connectionProvider = sessionFactoryImplementation.getConnectionProvider();
try {
Connection connection = connectionProvider.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
Примечание: Я использую гибернации-ядро-5.0.5.Final.jar
Есть ли другой способ? Я хочу это отдельно, потому что я передаю этот объект в другом классе и методах. –
У меня есть обновленный код. Пожалуйста, проверьте, может быть, это решение будет приемлемым для вас. –
Нет никакого метода 'session.getSession()' –