Когато използвате пул за връзки, извикване на Connection#close() не затваря физически връзката, но я връща в пула за бъдеща повторна употреба. С други думи, връзката остава отворена и това е целият смисъл от използването на пул.
Е, това е проблемът. Вие създавате SessionFactory отново и отново (всеки създава свой собствен пул), докато вие трябва да го създадете само веднъж за целия живот на вашето приложение. Ако не използвате конкретна рамка, това обикновено се прави в някакъв полезен клас (известният HibernateUtil клас).
Официалният урок за хибернация има много елементарен пример за такъв клас. Или вижте този което е малко по-богато.