Pierwszy :
Twój FK powinien odnosić się do PK wskazanego podmiotu. W tym przypadku powinieneś mieć person.conference_room_id które odwołuje się do conferenceroom.id . Jeśli chcesz swój code jako pole identyfikujące ConferenceRoom encji, to nie używaj klucza zastępczego. Jeśli code kolumna nie jest kandydatem na PK, to też nie jest kandydatem na FK.
Drugi :
Połącz :
Utrzymuj :
Myślę, że pomyliłeś merge z persist . Z tego, co mogę powiedzieć po podanym kodzie, tworzysz nowy ConferenceRoom a nie modyfikowanie już istniejącego. Dlatego merge nie zrobi tego, czego chcesz. Spróbuj zmienić (dostarczoną) metodę na następującą:
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);
}
Te rzeczy powinny rozwiązać zgłoszone przez Ciebie problemy.