Как сказать Spring Data Couchbase для встраивания или ссылки на сущность? - PullRequest
0 голосов
/ 15 ноября 2018

Мой вопрос прост: как мне сказать Spring Data Couchbase, чтобы он вставлял или ссылался на сущность, используя @Field?Есть ли дополнительная аннотация к нему?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Вы не можете ссылаться на другие документы, используя @Field, цель этой аннотации до сих пор состоит только в том, чтобы указать имя вашего атрибута в конечном документе JSON, но аннотация @Field не является обязательной.

Что касается проверки ссылок на идентификаторы, то при добавлении такой функции / проверки существует множество побочных эффектов, одним из которых является то, что на вашу пропускную способность записи будет оказано значительное влияние.MongoDB имеет архитектуру Master / Slave, которая позволяет легко реализовать эту функцию, с другой стороны, она жертвует масштабируемостью.

Подход Couchbase предпочитает полагаться на ваше приложение, чтобы выполнить такую ​​проверку (это ответственность приложенияв любом случае, чтобы сохранить правильные данные), но как можно быстрее выполняйте чтение / запись.

Мое личное представление: этот вид проверки является просто "бюрократией" СУБД, поскольку ваше приложение уже проверяет все.

0 голосов
/ 15 ноября 2018

Не уверен, какую дополнительную аннотацию вы запрашиваете.

Согласно документации :

Все объекты должны быть аннотированы @Document.

Кроме того, каждое поле в сущности должно быть помечено @Field аннотация из Couchbase SDK. Пока это - строго говоря - необязательно, это помогает уменьшить крайние случаи и ясно показывает намерение и дизайн объекта. Он также может быть использован для хранения поля под другое имя.

Существует также специальная аннотация @Id, которая должна быть всегда в место. Рекомендуется также указывать идентификатор свойства.

Например:

import com.couchbase.client.java.repository.annotation.Id;
import com.couchbase.client.java.repository.annotation.Field;
import org.springframework.data.couchbase.core.mapping.Document;

@Document
public class User {

    @Id
    private String id;

    @Field
    private String firstname;

    @Field
    private String lastname;

    public User(String id, String firstname, String lastname) {
        this.id = id;
        this.firstname = firstname;
        this.lastname = lastname;
    }

    public String getId() {
        return id;
    }

    public String getFirstname() {
        return firstname;
    }

    public String getLastname() {
        return lastname;
    }
}

Как говорится, в документации есть еще одна аннотация, которая может оказаться полезной:

Если вы хотите другое представление имени поля внутри документ в отличие от имени поля, используемого в вашей сущности, вы можете установите другое имя в аннотации @Field. Например, если вы хотите, чтобы ваши документы были небольшими @Field("fname"). В документе JSON вы увидите {"fname": ".."} вместо {"firstname": ".."}.

...