Установка значения для атрибута не DB при получении документов из Mongo с использованием Morphia - PullRequest
0 голосов
/ 15 апреля 2019

Это один образец документа (строки) из коллекции (таблицы) с именем product, которая находится в MongoDB:

{ 
    "_id" : ObjectId("5cb39171528a28f831f"), 
    "seller" : "Product Seller 1", 
    "title" : "Product Title 1", 
    "price" : "159.75", 
    "brand" : "Product Brand 1", 
    "productId" : NumberInt(247)
}

Модель Java для этой коллекции выглядит следующим образом:

@Entity(value = "product", noClassnameStored = true)
@Data
public class Product {
    @Id
    @Property("_id")
    private ObjectId objectId;

    private String seller;
    private String title;
    private String price;
    private String brand;
    private Long productId;
}

Я использую Morphia в качестве драйвера Java MongoDB здесь. И я использую аннотацию Lombok @Data, которая предоставляет конструктор, геттеры и сеттеры.
Модель отлично работает и способна извлекать данные из БД. Мое новое требование - добавить дополнительное поле в модель. Имя нового поля будет stringObjectId, в котором будет храниться значение objectId в формате String.

Обратите внимание, что в документе БД не будет никаких изменений. То есть в документ БД не добавляется новое поле.

Я хочу, чтобы при извлечении данных из коллекции в виде списка или отдельной строки query.asList();
значение в stringObjectId также должно быть заполнено. Примерно так:
stringObjectId = objectId.toString()

Не так давно я пытался переопределить сеттеры и конструктор этой модели, чтобы установить значение в переменной stringObjectId, но, похоже, ничего не работает. Есть ли способ, которым это может быть достигнуто?

1 Ответ

2 голосов
/ 15 апреля 2019

Ознакомьтесь с событиями Morphia LifeCycle: https://www.playframework.com/modules/morphia-1.2.4/lifecycle-def

Здесь будет полезен @PostLoad.Вам, вероятно, понадобится @Transient.

...