Как одной операцией создать записи связанных таблиц @OneToMany?
Коллеги, как создать записи подчиненной таблицы, которые приходят в json вместе с записью основной таблицы? У меня есть модели Employee и подчиненная ей Contact. Можно ли реализовать такое одной операцией, одним json?
Или нужно передавать в контроллер два json: для Employee и для Contact? Например, сначала записывать Employee, потом Contact уже имея Employee.
Сейчас если я передаю одним json, то в поле employee_id записывается null .
{
"firstName": "Oleg",
"contacts":
[
{
"value": "+7-914-502-10-10",
"employee": {"id": ...} // что здесь нужно указать и можно ли?
}
]
}
employee
@Entity
@Table(name = "employee")
public class Employee {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "first_name")
private String firstName;
@OneToMany(mappedBy = "employee", cascade = CascadeType.ALL)
private List<Contact> contacts;
}
contact
@Entity
@Table(name = "contact")
public class Contact {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "value")
private String value;
@ManyToOne
@JoinColumn(name = "employee_id", referencedColumnName = "id")
private Employee employee;
}
Контроллер
@PostMapping
public void create(@RequestBody Employee employee){
employeeRepository.save(employee);
}
Ответы (1 шт):
Автор решения: vi0
→ Ссылка
Понял, как связать таблицы, если передаю одним json. Стандартно:
@Service
public class EmployeeService {
private final EmployeeRepository employeeRepository;
@Transactional
public void save(Employee employee) {
var contacts = employee.getContacts();
for (Contact contact: contacts) {
contact.setEmployee(employee);
}
employeeRepository.save(employee);
}