使用 Spring 数据获取基于 MongoDB 中 DBRef 的嵌入文档
Get Embed Document based on DBRef in MongoDB using Spring data
我正在开发 spring 启动应用程序。我有 2 个型号
个人实体
@Data
@Document(collection = "products")
public class ProductEntity implements Serializable {
private static final long serialVersionUID = -8118791879505582652L;
@MongoId(FieldType.STRING)
private String id;
@Indexed
@Field("name")
private String name;
@Field("category")
@DBRef(lazy = true)
private CategoryEntity category;
// getters and setters
}
类别实体
@Data
@Document(collection = "categories")
public class CategoryEntity implements Serializable {
private static final long serialVersionUID = -636356399519451958L;
@MongoId(value = FieldType.STRING)
private String id;
@Field("name")
private String name;
@Field("desc")
private String desc;
public CategoryEntity(String id) {
super();
this.id = id;
}
// getters and setters
}
当我将数据保存到数据库中时,存储的数据是
产品文档
{
"_id": {
"$oid": "6141eeab92432109463ae8c4"
},
"name": "Adidas Running Shoes",
"category": {
"$ref": "categories",
"$id": "614049d91042cf40b5b9b304"
}
}
类别文件
{
"_id": {
"$oid": "614049d91042cf40b5b9b304"
},
"name": "Shoes",
"desc": "Men's running Shoes",
}
但是当我尝试使用 Spring-Data-MongoDB findAll()
ProductEntity
数据时,类别将 return null
.
public List<ProductModel> getProducts() {
List<ProductEntity> entities = productRepo.findAll();
return entities.stream().map(entity -> {
ProductModel product = new ProductModel();
BeanUtils.copyProperties(entity, product);
if (Objects.nonNull(entity.getCategory())) {
BeanUtils.copyProperties(entity.getCategory(), product.getCategory());
}
return product;
}).collect(Collectors.toList());
}
我需要输出格式如下。
{
"_id": {
"$oid": "6141eeab92432109463ae8c4"
},
"name": "Adidas Running Shoes",
"category": {
"_id": {
"$oid": "614049d91042cf40b5b9b304"
},
"name": "Shoes",
"desc": "Men's running Shoes",
}
}
请告诉我如何获得所需的输出。
我做了一个小改动,问题已经解决。我变了
来自
@MongoId(value = FieldType.STRING)
private String id;
至
@MongoId(value = FieldType.OBJECT_ID)
private ObjectId id;
实体和代码都有效!
我正在开发 spring 启动应用程序。我有 2 个型号
个人实体
@Data
@Document(collection = "products")
public class ProductEntity implements Serializable {
private static final long serialVersionUID = -8118791879505582652L;
@MongoId(FieldType.STRING)
private String id;
@Indexed
@Field("name")
private String name;
@Field("category")
@DBRef(lazy = true)
private CategoryEntity category;
// getters and setters
}
类别实体
@Data
@Document(collection = "categories")
public class CategoryEntity implements Serializable {
private static final long serialVersionUID = -636356399519451958L;
@MongoId(value = FieldType.STRING)
private String id;
@Field("name")
private String name;
@Field("desc")
private String desc;
public CategoryEntity(String id) {
super();
this.id = id;
}
// getters and setters
}
当我将数据保存到数据库中时,存储的数据是
产品文档
{
"_id": {
"$oid": "6141eeab92432109463ae8c4"
},
"name": "Adidas Running Shoes",
"category": {
"$ref": "categories",
"$id": "614049d91042cf40b5b9b304"
}
}
类别文件
{
"_id": {
"$oid": "614049d91042cf40b5b9b304"
},
"name": "Shoes",
"desc": "Men's running Shoes",
}
但是当我尝试使用 Spring-Data-MongoDB findAll()
ProductEntity
数据时,类别将 return null
.
public List<ProductModel> getProducts() {
List<ProductEntity> entities = productRepo.findAll();
return entities.stream().map(entity -> {
ProductModel product = new ProductModel();
BeanUtils.copyProperties(entity, product);
if (Objects.nonNull(entity.getCategory())) {
BeanUtils.copyProperties(entity.getCategory(), product.getCategory());
}
return product;
}).collect(Collectors.toList());
}
我需要输出格式如下。
{
"_id": {
"$oid": "6141eeab92432109463ae8c4"
},
"name": "Adidas Running Shoes",
"category": {
"_id": {
"$oid": "614049d91042cf40b5b9b304"
},
"name": "Shoes",
"desc": "Men's running Shoes",
}
}
请告诉我如何获得所需的输出。
我做了一个小改动,问题已经解决。我变了
来自
@MongoId(value = FieldType.STRING)
private String id;
至
@MongoId(value = FieldType.OBJECT_ID)
private ObjectId id;
实体和代码都有效!