You want to look at
http://www.hibernate.org/hib_docs/v3/re ... tch-direct
Basically, bulk update delete statements should not be issued from sessions which already have entities associated with them.
But anyway, the first update comes from the flush process that occurs prior to executing the HQL query. Somehow the Session thinks that User has changed between the time you save() it and the time it gets flushed. Typically this indicates bad getter/setter implementations or problems with the type mappings. Paste in the source of your User class (and please use the code tags)...