Что на самом деле делает аннотация @Embedded в Morphia?

При написании документов в Mongodb с помощью Morphiaтакая структура будет написана без проблем и без необходимости @Embedded аннотация:

@Entity
public class Blog {
    @Id
    private String id;
    private List<Comment> comments;
}

comments поле счастливо хранится как массив вложенных Comment элементы (Comment простой POJO без аннотаций).

Тем не менее Morphia документация предполагает, что я должен использовать это:

@Entity
public class Blog {
    @Id
    private String id;
    @Embedded
    private List<Comment> comments;
}

Но в моих тестах с использованием @Embedded аннотация, кажется, не делает ничего дополнительного по сравнению с простым написанием структуры без аннотации.

Так что же @Embedded аннотации на самом деле делать? Влияет ли это на способность запрашивать или индексировать, или на какую-либо другую функцию хранения, отличную от простой записи данных?

2 ответа

Serializable обычно не используется с Morphia. @Embedded это немного неоднозначный предмет, чье первоначальное намерение, похоже, потеряно. На самом деле, в моей развилке, над которой я работаю над официальной версией 2.0 Morphia, я ограничил ее так, чтобы она применялась только на уровне класса. Это говорит Morphia, чтобы отобразить тип, но не потерпеть неудачу при отображении отсутствующего @Id аннотаций. В этой ветке, если вы хотите указать имя, отличное от имени поля, вы просто используете @Property как и для любых не встроенных типов.

Надеюсь, это прояснит это хотя бы немного.

Как правило, вы должны @Embedded для объектов, которые зависят от родительского объекта (и, следовательно, не имеют жизни вне его) и не являются общими для объектов.

По умолчанию Morphia использует имя поля в качестве имени значения в Mongo. Это можно переопределить, указав имя в аннотации @Embedded:

    @Embedded("blog_comments")
    private List<Comment> comments;

Даже без @Embedded вы все еще можете использовать Java-класс в качестве типа поля, если этот класс реализует java.io.Serializable, Однако это поле будет храниться в MongoDB в двоичном формате вместо структурированных данных, как показано выше.

Источники здесь и здесь

Другие вопросы по тегам