_классовое поле и база данных spring couchbase

#spring-data #couchbase #spring-data-couchbase

#spring-данные #база данных couchbase #база данных spring-data-couchbase

Вопрос:

Итак, я пытался найти способ удалить / переименовать (и изменить значение полей ) поле _class из документа, созданного spring data couchbase, поскольку документ будет сохранен одним сервисом и, по всей вероятности, будет использован кем-то совершенно другим.

Я поиграл с API для spring couchbase и путем проб и ошибок обнаружил, что могу переименовать поле _class с пользовательским значением, используя следующий способ ->

1) Переопределите метод TypeKey в классе, наследующем конфигурацию AbstractCouchbaseConfiguration . Например, допустим, мы переопределили TypeKey, чтобы выполнить следующее ->

@Override
public String typeKey() {
return "type";
}

2) В POJO, который хранит данные в couchbase, добавьте поле с тем же именем, что вы указали, в возвращаемое значение метода TypeKey и при необходимости присвоите ему пользовательское значение —

private final String type = "studentDoc";

Я хотел проверить, является ли это допустимым способом для этого или / и какой-то лучший способ доступен для выполнения чего-то подобного сейчас

Ответ №1:

На данный момент это единственный способ сделать это с spring data, мы хотели бы добавить несколько дополнительных способов сделать это, но мы ограничены контрактами Spring Data interface. Вот почему большинство дополнительных конфигураций выполняются с помощью AbstractCouchbaseConfiguration.

Ответ №2:

Библиотеке данных Spring требуется поле с полным именем класса в качестве значения, чтобы понять, в какой объект класса десериализовать данные из couchbase. По умолчанию это поле будет именоваться _class , но может быть изменено путем переопределения typeKey() метода в вашей конфигурации Couchbase (расширения AbstractCouchbaseConfiguration ), как указано вами.

 @Override
public String typeKey() {
    return "customType";
}
  

Но, насколько я знаю, вам не следует изменять значение поля, поскольку библиотека не сможет понять, в какой объект десериализовать данные.

Комментарии:

1. Я понимаю точку зрения о рекомендации не изменять значение _class . Но в моем сценарии это не имеет большого смысла, потому что у потребителя этих документов, вероятно, не будет доступа к классу, который я использую для хранения документов. Вот почему я хочу удалить / переименовать поле во что-то вроде «тип» (это стандартное поле, которое мы используем для идентификации различных типов документов)