I\'m starting a new project, trying to do things right this time(so more than one question), I might need some help, I\'m not sure what I\'m doing wrong :
I would strongly recommend staying far, far away from the @Transactional in Spring. For your usage, stick with an open-session-in-view pattern. When a request comes in, a session is opened and a transaction started. If a exception or other error is encountered, roll back the transaction. Otherwise commit. That way, Hibernate takes care of all of the heavy lifting for you.
If you go down the path of @Transactional, you will enter into a murky realm of lazy loading exceptions and other strange behavior as you try to sort out what came from where. At the worst, you will need to keep careful track of the order in which methods are called (i.e. pay strict attention to your stack) to ensure that you have the right permissions.
Worst of all, if you put @Transactional on things that are already in the Hibernate first or second level cache, you will wind up getting lots and lots of BEGIN/END transactions going to your database with no actual queries being executed (because they are in the cache). This can kill your performance and are almost impossible to quash.
After the transaction in your session blows up, you need to rollback. You may need to redo your session, depending on the semantics around that. The fix for the first one is simple - do a check first to see if the entity already exists before doing the save. That will fix the second one.
Check out this article comparing Hibernate/JPA and myBatis for some more commentary.