Podczas korzystania z puli połączeń, wywoływanie Connection#close()
nie zamyka fizycznie połączenia, ale zwraca je do puli w celu ponownego wykorzystania w przyszłości. Innymi słowy, połączenie pozostaje otwarte i to jest cały sens korzystania z puli.
Cóż, to jest problem. Tworzysz SessionFactory
w kółko (każdy tworzy własną pulę), podczas gdy powinieneś ją utworzyć tylko raz przez cały okres użytkowania aplikacji. Jeśli nie używasz żadnego konkretnego frameworka, zwykle robi się to w jakiejś klasie narzędziowej (słynny HibernateUtil
klasa).
Oficjalny przewodnik dotyczący hibernacji ma bardzo prosty przykład takiej klasy. Lub zobacz ten co jest nieco bogatsze.