Regarding flushing: OpenSessionInViewFilter/Interceptor assumes that it is used with middle tier transactions or HibernateTemplates with flushMode FLUSH_EAGER. If you use neither, there won't be any flush on such a Session. (The javadoc explicitly states this.)
In your particular case, double-check your configuration and your execution logs: Are those transactions really applied? Do you always work with the "userService" proxy, never with the target directly? At the end of a non-read-only transaction, a flush should happen - check the debug logs.
As a side note, are you aware that HibernateTemplate features a lot of convenience methods that pre-implement typical one-liners like saveOrUpdate? For example:
Code:
getHibernateTemplate().saveOrUpdate(object);
Juergen