Tut beginTransaction im Ruhezustand weisen Sie eine neue DB-Verbindung?
Nur Fragen, wenn zu Beginn einer neuen Transaktion in Hibernate tatsächlich weist eine Verbindung zu der DB?
Ich bin besorgt b/c unsere server beginnt eine neue Transaktion für jede Anforderung empfangen, selbst wenn die Anforderung nicht die Interaktion mit der DB. Wir sehen, wie DB-verbindungen, wie ein Nadelöhr, so Frage ich mich, ob ich die Zeit nehmen sollte den Bereich eingrenzen, der mein Transaktionen.
Überall gesucht und nicht finden konnten, eine gute Antwort. Der sehr einfache code ist hier:
SessionFactory sessionFactory = (SessionFactory) Context.getContext().getBean("sessionFactory");
sessionFactory.getCurrentSession().beginTransaction();
sessionFactory.getCurrentSession().setFlushMode(FlushMode.AUTO);
vielen Dank!
ein
Du musst angemeldet sein, um einen Kommentar abzugeben.
(Aktualisiert, pro Pascal Thivent Kommentar)
Jeder
Session
erstellt eine Datenbank-Verbindung, wenn es eine Notwendigkeit, dass - wenn z.B. eine Transaktion gestartet. Die Verbindung ist nicht geöffnet über die bloße Erstellung der Sitzung.Um dies zu überwinden, können Sie eine Verbindung pool so, dass verbindungen, die wiederverwendet werden. Oder Sie können sicherstellen, dass (wie es scheint, Sie Tat), dass keine Transaktion gestartet wird automatisch.
(Diese beschreibt nur-lese-Transaktionen. Werfen Sie einen Blick.)
Session
. Siehe meine Antwort für details.Gemäß Abschnitt 11.1. Sitzungs-und transaktionsbereichen der Hibernate Dokumentation:
Nun, um Ihre Frage zu beantworten:
Session
hat nicht sofort erwerben, eine Verbindung (die Verbindung wird lazy geladen)beginTransaction()
verursachen wird, die Last der Anschluss für das gegebeneSession
connection
Blick auf
org.hibernate.impl.SessionImpl#beginTransaction()
und gehen Sie durch den code für weitere details.