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.