I am opening and closing the hibernate session in DAO
Well, it looks like you've walked head first into an anti-pattern. This is often referred to as the transaction per method call, or transaction per interaction anti-pattern. It's common in many
J2EE EJB 2.x applications, but the trend is very much away from this.
You really should think of allowing the client application to manage transaction demarcation, and thus, the opening and closing of the session. This allows many database calls to occur within a single transaction, rather than opening and closing them constantly. Plus, you won't be able to allow multiple DAO calls to act as a single unit of work, as each DAO uses its own Session/transaction. That's a HUGE problem!
Take a look at the open session per view design construct. It will help you out greatly, and help you avoid many potential LazyInitializationExceptions and such.
Kindest regards!
-Cameron McKenzie