Эффективное обновление сущности в Hibernate

Я думаю, это может быть как вопрос новичка, но все же я хотел бы знать некоторые ответы.

Допустим, есть сущности: Больница и Доктор (Многие-ко-многим). Предположим, что в моем классе диспетчера я должен забрать всех существующих врачей и больниц, а затем нанять одного врача в конкретной больнице

@Controller
public class HospitalController {
  ...
    @RequestMapping("/hireDoctor")
    public String (HttpServletRequest request, Model model) {
        List<Hospital> hospitals = hospitalService.findAllHospitals();
        List<Doctor> doctors = doctorService.findAllDoctors();

        //some logic, in the end we choose just one doctor and one hospital

        Doctor doctor = doctors.get(0);
        Hospital hospital = hospitals.get(0);

        hospitalService.hireDoctor(hospital, doctor);
    }
  ...

@Service
public class HospitalService {
  ..  
    @Transactional
    public void hireDoctor(Hospital hospital, Doctor doctor) {
        //ideally
        List<Doctor> doctors = hospital.getDoctors();
        doctors.add(doctor);

        this.em.merge(hospital);
    }
  ..
}

Это, конечно, не работает, потому что - как я понимаю - я собрал всех врачей и больниц в моем контроллере, а затем в методе hireDoctor мы открываем транзакции, передавая обычные объекты Java, которых нет в сеансе.

Я знаю, что я могу просто снова вызвать Больницу с конкретным идентификатором и Доктора с конкретным идентификатором, а затем сохранить его

public void hireDoctor(Hospital hospital, Doctor doctor) {
     Hospital h = hospitalRepo.getHospitalById(hospital.getId());
     Doctor d = hospitalRepo.getDoctorById(doctor.getId());
     List<Doctor> doctors = h.getDoctors();
     doctors.add(d);
}

Но это выглядит просто мусором.

Итак, как такое обновление должно выглядеть наиболее эффективным?

Ответы на вопрос(1)

Ваш ответ на вопрос