public MutationBatch write(final ApplicationScope collectionScope, UniqueValue value) {

    Preconditions.checkNotNull(value, "value is required");

    final Id entityId = value.getEntityId();
    final UUID entityVersion = value.getEntityVersion();
    final Field<?> field = value.getField();

    ValidationUtils.verifyIdentity(entityId);
    ValidationUtils.verifyVersion(entityVersion);

    final EntityVersion ev = new EntityVersion(entityId, entityVersion);
    final UniqueFieldEntry uniqueFieldEntry = new UniqueFieldEntry(entityVersion, field);

    return doWrite(
        collectionScope,
        value,
        new RowOp() {

          @Override
          public void doLookup(final ColumnListMutation<EntityVersion> colMutation) {
            colMutation.putColumn(ev, COL_VALUE);
          }

          @Override
          public void doLog(final ColumnListMutation<UniqueFieldEntry> colMutation) {
            colMutation.putColumn(uniqueFieldEntry, COL_VALUE);
          }
        });
  }
  @Override
  public MutationBatch write(
      final ApplicationScope collectionScope, final UniqueValue value, final int timeToLive) {

    Preconditions.checkNotNull(value, "value is required");
    Preconditions.checkArgument(timeToLive > 0, "timeToLive must be greater than 0 is required");

    final Id entityId = value.getEntityId();
    final UUID entityVersion = value.getEntityVersion();
    final Field<?> field = value.getField();

    ValidationUtils.verifyIdentity(entityId);
    ValidationUtils.verifyVersion(entityVersion);

    final EntityVersion ev = new EntityVersion(entityId, entityVersion);
    final UniqueFieldEntry uniqueFieldEntry = new UniqueFieldEntry(entityVersion, field);

    return doWrite(
        collectionScope,
        value,
        new RowOp() {

          @Override
          public void doLookup(final ColumnListMutation<EntityVersion> colMutation) {
            colMutation.putColumn(ev, COL_VALUE, timeToLive);
          }

          // we purposefully leave out TTL.  Worst case we issue deletes against tombstoned columns
          // best case, we clean up an invalid secondary index entry when the log is used
          @Override
          public void doLog(final ColumnListMutation<UniqueFieldEntry> colMutation) {
            colMutation.putColumn(uniqueFieldEntry, COL_VALUE);
          }
        });
  }