Get-Connection-Objekt während der Verwendung von SessionFactory.getCurrentSession() in den Ruhezustand
Ich versuche Connection
Objekt in Hibernate, wenn SessionFactory.getCurrentSession()
verwendet wird.
Quellcode
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()
gibt Proxy
Objekt Session
so kann Es nicht wirken, auf SessionImpl
also, was sind die anderen Möglichkeiten, um Connection
Objekt. Oder Wie SessionImpl
vom Proxy-Objekt.
Andere option, die ich habe versucht, aber es sagt getConnectionProvider()
Methode nicht gefunden.
SessionFactoryImplementor sessionFactoryImplementation = (SessionFactoryImplementor) session.getSessionFactory();
ConnectionProvider connectionProvider = sessionFactoryImplementation.getConnectionProvider();
try {
Connection connection = connectionProvider.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
Hinweis: ich bin mit hibernate-core-5.0.5.Final.jar
InformationsquelleAutor Vicky Thakor | 2016-12-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Hibenate 5 wir brauchen, um Dinge ein bisschen anders (für mehr details schauen Sie https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html):
Meine Konfiguration derby-db, wenn Sie wan, um test-code.
Ausgabe dieser app :
Ich habe aktualisierten code. Bitte prüfen, vielleicht ist diese Lösung akzeptabel sein wird für Sie.
Es ist nicht jede Methode
session.getSession()
Haben Sie nach dem code? Diese Linie Anschluss c = ((SessionImpl)sess.getSession()).Verbindung(); ich denke, das ist, was Sie wollen.
Entschuldigt, ich war mit die Letzte version von hibernate 5.2.3, erklärt dies, warum ich nicht verstanden, was falsch war. Ich schlage vor zu ändern in bestehenden code
Connection c
variableConnection c = sessionFactory. getSessionFactoryOptions().getServiceRegistry(). getService(ConnectionProvider.class).getConnection();
InformationsquelleAutor Saulius Next