Я пишу Spring-приложение, в котором есть две сущности, которые связаны отношениями один-ко-многим, давайте назовем их матерью и ребенком.
Когда я создаю материнскую сущность с помощью запроса POST, я хочудетская сущность будет создана автоматически.Используя аннотации @OneToMany и @ManyToOne, это работает отлично.По крайней мере, пока я предоставляю информацию о ребенке в Службе Матери.
Вот мой код
Mother.java
@Entity
@Table(name="mother")
public class Mother{
@Id
@Column(name="id", updatable = false, nullable = false)
private Long id;
@Column(name="name")
private String name;
@OneToMany(mappedBy = "mother", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Kid> kidList = new ArrayList<>();
//constructor, getter, setter
private void addKid(Kid kid) {
this.kidList.add(kid);
kid.setMother(this);
}
}
Ребенок.java
@Entity
@Table(name="kid")
public class Kid{
@Id
@Column(name="id", updatable = false, nullable = false)
private Long id;
@Column(name="name")
private String name;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "mother_id", nullable=false)
private Mother mother;
//constructor, getter, setter
}
MotherController.java
@RestController
@RequestMapping("mothers")
public class MotherController {
@Autowired
private MotherService motherService;
MotherController(MotherService motherService) {
this.motherService = motherService;
}
@PostMapping
Mother createMother(@RequestBody Mother mother) {
return this.motherService.createMother(mother);
}
}
MotherService.java
@Service
public class MotherService {
private MotherRepository motherRepository;
@Autowired
public MotherService (MotherRepository motherRepository) {
super();
this.motherRepository= motherRepository;
}
public Mother createMother(Mother mother) {
Kid kid = new Kid("Peter");
mother.addKid(kid);
return this.motherRepository.save(mother);
}
}
Репозитории для матери и ребенка расширяют JpaRepository без каких-либо пользовательских методов до сих пор..
Мой POST-запрос похож на (с использованием Почтальона)
{
"name":"motherName"
}
Теперь создается мама с именем "motherName" и ребенок с именем "Peter".
Моя идея: использование DTO
Теперь я пытаюсь реализовать DTO, который содержит имя матери и имя ребенка, сопоставляет эту информацию в MotherService с сущностями исохраните их через соответствующий репозиторий, чтобы я мог определить оба имени в запросе POST.
motherDto.java
public class mother {
private String motherName;
private String kidName;
//getter, setter
}
Поэтому, когда я POST
{
"motherName":"Susanne",
"kidName":"Peter"
}
илиеще лучше
{
"mother": {
"name":"Susanne"
},
"kid": {
"name":"Peter"
}
}
мать с именем Сюзанна и ребенок с именем Питер.
Мой вопрос
Как мне сопоставить DTO с двумя объектами?
Или я что-то не так понял?Есть ли более простой способ достичь моей цели?