You could try to put an index onto some of the columns from your where clause. You also could try to replace one or more JOINs with subselects.
I dont know which DB you are using (8 mins sounds insane). You can inspect the explain plan of the sql query to see whats going wrong there, if your DB got something like that (explain plan is oracle specific).
You should also check if you're using the right database driver. Try the generated sql with a proprietary database tool and look if its the same time as from hibernate.