public void forceLocked(Object entity, Object nextVersion) {
   version = nextVersion;
   loadedState[persister.getVersionProperty()] = version;
   //noinspection deprecation
   setLockMode(LockMode.FORCE); // TODO:  use LockMode.PESSIMISTIC_FORCE_INCREMENT
   persister.setPropertyValue(entity, getPersister().getVersionProperty(), nextVersion);
 }
  /**
   * Handle updating the internal state of the entry after actually performing the database update.
   * Specifically we update the snapshot information and escalate the lock mode
   *
   * @param entity The entity instance
   * @param updatedState The state calculated after the update (becomes the new {@link
   *     #getLoadedState() loaded state}.
   * @param nextVersion The new version.
   */
  public void postUpdate(Object entity, Object[] updatedState, Object nextVersion) {
    this.loadedState = updatedState;
    setLockMode(LockMode.WRITE);

    if (getPersister().isVersioned()) {
      this.version = nextVersion;
      getPersister().setPropertyValue(entity, getPersister().getVersionProperty(), nextVersion);
    }

    if (getPersister().getInstrumentationMetadata().isInstrumented()) {
      final FieldInterceptor interceptor =
          getPersister().getInstrumentationMetadata().extractInterceptor(entity);
      if (interceptor != null) {
        interceptor.clearDirty();
      }
    }
    if (entity instanceof SelfDirtinessTracker)
      ((SelfDirtinessTracker) entity).$$_hibernate_clearDirtyAttributes();

    persistenceContext
        .getSession()
        .getFactory()
        .getCustomEntityDirtinessStrategy()
        .resetDirty(entity, getPersister(), (Session) persistenceContext.getSession());
  }