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()' –