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.