Yeah you're supposed to close the session after every unit of work you do is complete... not necessarily after every save or update... but certainly every time your program runs. You should check this page out:
http://www.hibernate.org/42.html
I found it really helpful. I use the third code chunk on that page for my applications.
Code:
try {
factory.getCurrentSession().beginTransaction();
// Do some work
factory.getCurrentSession().load(...);
factory.getCurrentSession().persist(...);
factory.getCurrentSession().getTransaction().commit();
}
catch (RuntimeException e) {
factory.getCurrentSession().getTransaction().rollback();
throw e; // or display error message
}
In that idiom you don't really need to open and close a session as the factory does that for you. There's code farther down on that link that shows you how to build that factory.
Hope this helps.