2
我试图在使用SessionFactory.getCurrentSession()
时在Hibernate中获取Connection
对象。在休眠状态下使用SessionFactory.getCurrentSession()时获取Connection对象
的源代码
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());
}
}
堆栈跟踪
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()
给出Session
Proxy
对象,因此它不能将它转换为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()' –