After a while, 2 weeks, I figured out my problem,
on spring logs I realized that my session used by spring transaction and my dao's session was not the same.
That's why when I persisted with my dao, all data were commited.
Why these session were not the same ?
In my dao, I used an hibernate session got from my session factory, and this session was managed throw a ThreadLocal,
when I want to get a session I check the
thread local, if an existing one is present I return it otherwise I create a new one
and set it in my threadLocal instance for later calls.
I never checked my sessionFactory.getCurrentSession, my problem was here, because when spring will get its transaction
it will also get a session from the sessionFactory, then to get this session for my dao, the only way I have is to check the sessionFactory.currentSession.
Thanks for your help