How about add version checking in DefaultFlushEntityEventListener, I think it's reasonable.
if (persister.isVersioned() && !Versioning.getVersion(values, persister).equals(entry.getVersion())) { throw new StaleObjectStateException(entry.getEntityName(), entry.getId()); }