docs: private static MethodSpec buildDeleteByKeys(EntityMetaSignature signature) {
          ParameterizedTypeName returnType = genericType(DELETE_WITH_OPTIONS, signature.entityRawClass);
          final MethodSpec.Builder builder = MethodSpec.methodBuilder("deleteById")
                  .addJavadoc("Delete an entity using its complete primary key")
                  .addModifiers(Modifier.PUBLIC)
                  .addStatement("$T keys = new $T<>()", LIST_OBJECT, ARRAY_LIST)
                  .addStatement("$T encodedKeys = new $T<>()", LIST_OBJECT, ARRAY_LIST);
  
          signature.fieldMetaSignatures
                  .stream()
                  .filter(x -> x.context.columnType == PARTITION)
                  .map(x -> Tuple3.of(x.context.fieldName, x.sourceType, (PartitionKeyInfo) x.context.columnInfo))
                  .sorted(PARTITION_KEY_SORTER)
                  .forEach(tuple ->
                          builder.addJavadoc("@param $L partition key '$L'", tuple._1(), tuple._1())
                                  .addParameter(tuple._2(), tuple._1(), Modifier.FINAL)
                                  .addStatement("$T.validateNotNull($L, $S, $S)", VALIDATOR, tuple._1(),
                                          "Partition key '%s' should not be null", tuple._1())
                                  .addStatement("keys.add($L)", tuple._1())
                                  .addStatement("encodedKeys.add($L.$L.encodeFromJava($N, cassandraOptions))",
                                          signature.className + META_SUFFIX, tuple._1(), tuple._1())
                  );
  
          signature.fieldMetaSignatures
                  .stream()
                  .filter(x -> x.context.columnType == CLUSTERING)
                  .map(x -> Tuple3.of(x.context.fieldName, x.sourceType, (ClusteringColumnInfo) x.context.columnInfo))
                  .sorted(CLUSTERING_COLUMN_SORTER)
                  .forEach(tuple ->
                          builder.addJavadoc("@param $L clustering column '$L'", tuple._1(), tuple._1())
                                  .addParameter(tuple._2(), tuple._1(), Modifier.FINAL)
                                  .addStatement("$T.validateNotNull($L, $S, $S)", VALIDATOR, tuple._1(),
                                          "Partition key '%s' should not be null", tuple._1())
                                  .addStatement("keys.add($L)", tuple._1())
                                  .addStatement("encodedKeys.add($L.$L.encodeFromJava($N, cassandraOptions))",
                                          signature.className + META_SUFFIX, tuple._1(), tuple._1()));
  
          builder.addJavadoc("@return DeleteWithOptions<$T>", signature.entityRawClass);
  
          builder.addStatement("final Object[] partitionKeysValues = keys.toArray()")
                  .addStatement("final Object[] encodedPartitionKeyValues = encodedKeys.toArray()")
                  .addStatement("return new $T(entityClass, meta, rte, partitionKeysValues, encodedPartitionKeyValues, $T.empty(), cassandraOptions)", returnType, OPTIONAL)
                  .returns(returnType);
  
  
          return builder.build();
      }