public static OptimisticLockException mustHaveMappingWhenStoredInObject(Class aClass) {
    Object[] args = {aClass};

    OptimisticLockException optimisticLockException =
        new OptimisticLockException(
            ExceptionMessageGenerator.buildMessage(
                OptimisticLockException.class, MUST_HAVE_MAPPING_WHEN_IN_OBJECT, args));
    optimisticLockException.setErrorCode(MUST_HAVE_MAPPING_WHEN_IN_OBJECT);
    return optimisticLockException;
  }
  public static OptimisticLockException batchStatementExecutionFailure() {
    Object[] args = {};

    OptimisticLockException optimisticLockException =
        new OptimisticLockException(
            ExceptionMessageGenerator.buildMessage(
                OptimisticLockException.class, STATEMENT_NOT_EXECUTED_IN_BATCH, args));
    optimisticLockException.setErrorCode(STATEMENT_NOT_EXECUTED_IN_BATCH);
    return optimisticLockException;
  }
  // For CR#2281
  public static OptimisticLockException needToMapJavaSqlTimestampWhenStoredInObject() {
    Object[] args = {};

    OptimisticLockException optimisticLockException =
        new OptimisticLockException(
            ExceptionMessageGenerator.buildMessage(
                OptimisticLockException.class, NEED_TO_MAP_JAVA_SQL_TIMESTAMP, args));
    optimisticLockException.setErrorCode(NEED_TO_MAP_JAVA_SQL_TIMESTAMP);
    return optimisticLockException;
  }
  public static OptimisticLockException objectChangedSinceLastMerge(Object object) {
    Object[] args = {object, object.getClass().getName(), CR};

    OptimisticLockException optimisticLockException =
        new OptimisticLockException(
            ExceptionMessageGenerator.buildMessage(
                OptimisticLockException.class, OBJECT_CHANGED_SINCE_LAST_MERGE, args));
    optimisticLockException.setErrorCode(OBJECT_CHANGED_SINCE_LAST_MERGE);
    return optimisticLockException;
  }
  public static OptimisticLockException unwrappingObjectDeletedSinceLastRead(
      Vector pkVector, String className) {
    Object[] args = {pkVector, className};

    OptimisticLockException optimisticLockException =
        new OptimisticLockException(
            ExceptionMessageGenerator.buildMessage(
                OptimisticLockException.class, UNWRAPPING_OBJECT_DELETED_SINCE_LAST_READ, args));
    optimisticLockException.setErrorCode(UNWRAPPING_OBJECT_DELETED_SINCE_LAST_READ);
    return optimisticLockException;
  }
  public static OptimisticLockException noVersionNumberWhenDeleting(
      Object object, ObjectLevelModifyQuery query) {
    Vector key = new Vector();
    if (query.getSession() != null) {
      key = query.getSession().keyFromObject(object);
    }
    Object[] args = {object, object.getClass().getName(), key, CR};

    OptimisticLockException optimisticLockException =
        new OptimisticLockException(
            ExceptionMessageGenerator.buildMessage(
                OptimisticLockException.class, NO_VERSION_NUMBER_WHEN_DELETING, args),
            query);
    optimisticLockException.setErrorCode(NO_VERSION_NUMBER_WHEN_DELETING);
    return optimisticLockException;
  }
  public static OptimisticLockException objectChangedSinceLastReadWhenUpdating(
      Object object, ObjectLevelModifyQuery query) {
    Vector key = new Vector();
    if (query.getSession() != null) {
      key = query.getSession().keyFromObject(object);
    }
    Object[] args = {object, object.getClass().getName(), key, CR};

    OptimisticLockException optimisticLockException =
        new OptimisticLockException(
            ExceptionMessageGenerator.buildMessage(
                OptimisticLockException.class, OBJECT_CHANGED_SINCE_LAST_READ_WHEN_UPDATING, args),
            query);
    optimisticLockException.setErrorCode(OBJECT_CHANGED_SINCE_LAST_READ_WHEN_UPDATING);
    return optimisticLockException;
  }