这些是我的实体:-
这是我的骑手 Rider 实体
package com.app.enities;
import lombok.*;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.List;
@Document(collection = "Rider")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString(callSuper = true)
public class Rider {
@Id
private String id;
private String firstName;
private String lastName;
private String shortCred;
private Team teamName;
private List<Sponsor> sponsorList; //Enum
}
这是我的团队实体,我正在其中添加有关团队的信息
package com.app.enities;
import lombok.*;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString(callSuper = true)
public class Team {
@Id
private String id;
private String name;
private Bikes bike; //Enum
}
我正在以 JSON 形式添加数据。但由于 id 会自动生成,因此我不会提供任何类型的 ID:-
{
"firstName": "Marc",
"lastName": "Marquez",
"shortCred": "MM93",
"teamName": {
"name": "Gresini Racing",
"bike": "DUCATI"
},
"sponsorList": [
"REDBULL",
"SHOEI",
"ALPINESTAR",
"ESTRELLA_GALICIA",
"SAMSUNG"
]
}
但是正如您在下面的响应中看到的(我在 .save(newRider) 方法之后得到的回报),骑手 id 正在自动生成,但团队 id 没有自动生成。
{
"id": "65c731de83a0e43d7526c880",
"firstName": "Marc",
"lastName": "Marquez",
"shortCred": "MM93",
"teamName": {
"id": null, <--- null value here
"name": "Gresini Racing",
"bike": "DUCATI"
},
"sponsorList": [
"REDBULL",
"SHOEI",
"ALPINESTAR",
"ESTRELLA_GALICIA",
"SAMSUNG"
]
}
这是我第一次将 MongoDb 与 spring 一起使用,所以我不知道表之间的关联是如何工作的,也不知道它是否是像我们在 sql 中使用 @OneToOne 或 @ManyToOne 等那样关联到表的东西。
根据我的说法,这是预期的行为。 如果是 MongoDB,将仅为顶级实体生成“id”。
您可以参考这里提供的示例: https://spring.io/blog/2021/11/29/spring-data-mongodb-relation-modelling
“id”是为“Book”生成的,但不是为“Publisher”生成的。