You can try using a session.saveOrUpdate. Since the generator type in the ID isn't "assigned", hibernate should be able to tell if the object is persisted or transient. What it does is look at the id field... if it's empty, it'll assume the object is transient, and do an insert. If it has a value, it'll assume it's a persisted object and do an update.
If the object is no longer in cache, I don't think hibernate will be able to tell if it's dirty or not, so it'll update even if nothing is changed.
Hope that helps.