I think you are getting Session and Transaction confused.
The transaction is a wrapper around the commands you are giving to the database.
Code:
A transaction is associated with a Session and is usually instantiated by a call to Session.beginTransaction(). A single session might span multiple transactions since the notion of a session (a conversation between the application and the datastore) is of coarser granularity than the notion of a transaction. However, it is intended that there be at most one uncommitted Transaction associated with a particular Session at any time.
http://www.hibernate.org/hib_docs/v3/ap ... ction.html
And a session
http://www.hibernate.org/hib_docs/v3/ap ... ssion.html
committing a transaction does not close a database connection, it just forces all your changes to be persisted.
session.close() will close your database connection. I believe this is the best practice as I haven't seen a newer example that uses session.disconnect. This is just my opinion though maybe this will help.
http://forum.hibernate.org/viewtopic.php?t=924565
Most of the newer examples only show session.close()
http://www.hibernate.org/42.html
Hope this helps.