private boolean isUpdateNecessary(final FlushEntityEvent event, final boolean mightBeDirty) { final Status status = event.getEntityEntry().getStatus(); if (mightBeDirty || status == Status.DELETED) { // compare to cached state (ignoring collections unless versioned) dirtyCheck(event); if (isUpdateNecessary(event)) { return true; } else { FieldInterceptionHelper.clearDirty(event.getEntity()); return false; } } else { return hasDirtyCollections(event, event.getEntityEntry().getPersister(), status); } }