Eerste :
Uw FK moet verwijzen naar de PK van de entiteit waarnaar wordt verwezen. In dit geval zou u person.conference_room_id
. moeten hebben die verwijst naar conferenceroom.id
. Als je je code
. wilt om het identificatieveld te zijn voor de ConferenceRoom
entiteit, gebruik dan geen surrogaatsleutel. Als de code
column geen PK-kandidaat is, dan is het ook geen FK-kandidaat.
Tweede :
Ik denk dat je merge
hebt verward met persist
. Van wat ik kan zien aan de hand van de verstrekte code, maakt u een nieuwe ConferenceRoom
en niet een bestaande wijzigen. Daarom merge
gaat niet doen wat je wilt dat het doet. Probeer uw (meegeleverde) methode als volgt te wijzigen:
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);
}
Deze dingen zouden de problemen moeten oplossen die u aan de orde heeft gesteld.