Първо :
Вашият FK трябва да се позовава на PK на посочения обект. В настоящия случай трябва да имате person.conference_room_id
който препраща conferenceroom.id
. Ако искате вашия code
да бъде идентификационното поле за ConferenceRoom
обект, тогава не използвайте сурогатен ключ. Ако code
колоната не е кандидат за PK, значи също не е кандидат за FK.
Втори :
Мисля, че сте объркали merge
с persist
. От това, което мога да разбера от предоставения код, вие създавате нова ConferenceRoom
и без промяна на съществуващ. Следователно, merge
няма да направи това, което искаш да направи. Опитайте да промените своя (предоставен) метод на следния:
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);
}
Тези неща трябва да решат проблемите, които повдигнахте.