使用 Morphia 从 Mongo 获取文档时将值设置为非数据库属性
Setting value to non DB attribute while fetching documents from Mongo using Morphia
这是来自名为 product
的集合 (table) 中的一个示例文档(行),它位于 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 作为 MongoDB Java 驱动程序。我正在使用提供构造函数、getter 和 setter 的 Lombok @Data 注释。
该模型运行良好,能够从数据库中获取数据。我的新要求是在模型中添加一个附加字段。新字段的名称将为 stringObjectId
,它将以字符串格式存储 objectId
的值。
请注意,数据库文档不会有任何变化。也就是说,没有新字段被添加到数据库文档中。
我希望当我以列表或单行的形式从集合中获取数据时
query.asList();
stringObjectId
中的值也应该被填充。像这样:
stringObjectId = objectId.toString()
到目前为止,我已经尝试覆盖此模型的设置器和构造函数以设置 stringObjectId
变量中的值,但似乎没有任何效果。有什么办法可以实现吗?
查看 Morphia LifeCycle 事件:https://www.playframework.com/modules/morphia-1.2.4/lifecycle-def
@PostLoad
在这里会有帮助。您可能还需要 @Transient
。
这是来自名为 product
的集合 (table) 中的一个示例文档(行),它位于 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 作为 MongoDB Java 驱动程序。我正在使用提供构造函数、getter 和 setter 的 Lombok @Data 注释。
该模型运行良好,能够从数据库中获取数据。我的新要求是在模型中添加一个附加字段。新字段的名称将为 stringObjectId
,它将以字符串格式存储 objectId
的值。
请注意,数据库文档不会有任何变化。也就是说,没有新字段被添加到数据库文档中。
我希望当我以列表或单行的形式从集合中获取数据时
query.asList();
stringObjectId
中的值也应该被填充。像这样:
stringObjectId = objectId.toString()
到目前为止,我已经尝试覆盖此模型的设置器和构造函数以设置 stringObjectId
变量中的值,但似乎没有任何效果。有什么办法可以实现吗?
查看 Morphia LifeCycle 事件:https://www.playframework.com/modules/morphia-1.2.4/lifecycle-def
@PostLoad
在这里会有帮助。您可能还需要 @Transient
。