У меня есть родительский / дочерний объект, который определяется следующим образом:
В Сотрудник класс:
@OneToMany(mappedBy = "employee", cascade = CascadeType.ALL )
@JsonManagedReference
private List<Phone> phones = new ArrayList<>();
В Телефон класс :
@ManyToOne
@JsonBackReference
private Employee employee;
И когда я хочу вставить или получить новый телефон в ресурсе /employees/{employeeId}/phones/{id}
внутри PhoneService
@Override // POST
public Phone createPhone(long employeeId, @Valid Phone phone) {
Employee employee = employeeRepository.findById(employeeId).orElseThrow(() ->
new EntityNotFoundException("Could not find an employee for the provided ID.")
);
// ## option 1
employee.addPhone(phone);
phone.setEmployee(employee);
employeeRepository.save(employee);
return phoneRepository.findById(phone.getId()).orElseThrow(() ->
new EntityNotFoundException("Could not find a phone for the provided ID.")
);
// ## option 2
// phone.setEmployee(employee);
// return phoneRepository.save(phone);
}
@Override // GET
public Phone getPhone(long employeeId, long id) {
return phoneRepository.findById(id).orElseThrow(() ->
new EntityNotFoundException("Could not find a phone for the provided ID.")
);
}
Я чувствую, что вариант 2 проще, но я технически делаю это неправильно, потому что я прямо ищу телефон в БД, не заботясь об идентификаторе его сотрудника.