Pertama :
FK Anda harus mereferensikan PK dari entitas yang dirujuk. Dalam kasus instan, Anda harus memiliki person.conference_room_id yang mereferensikan conferenceroom.id . Jika Anda ingin code menjadi bidang pengenal untuk ConferenceRoom entitas, maka jangan gunakan kunci pengganti. Jika code kolom bukan calon PK, maka juga bukan calon FK.
Kedua :
Bertahan :
Saya pikir Anda bingung merge dengan persist . Dari apa yang saya tahu dari kode yang diberikan, Anda membuat ConferenceRoom baru dan tidak mengubah yang sudah ada. Oleh karena itu, merge tidak akan melakukan apa yang Anda inginkan. Coba ubah metode (disediakan) Anda menjadi berikut:
public ConferenceRoom getNewConferenceRoom(Person p) {
ConferenceRoom r = new ConferenceRoom();
r.setCode("MyUniqueGeneratedCode");
r.getPeople().add(p);
// sessionFactory is spring injected member
sessionFactory.getCurrentSession().persist(r);
}
Hal-hal ini akan memperbaiki masalah yang Anda ajukan.