Session per Conversation pattern:
http://www.hibernate.org/42.html#A9
Also, do look through their CaveatEmptor example code. It demonstrates many key features and good guidlines on how to do things.
I have also found that passing a session into the DAO and then you explicitly closing the session later is useful (if only working on 1 object with lazy collections). If there are multiple objects that need to be rolledback on a exception, the session per conversation logic is good for you.
-Please rate me if you found this helpful