Zuerst :
Ihr FK sollte auf die PK der referenzierten Entität verweisen. Im vorliegenden Fall sollten Sie person.conference_room_id
haben die auf conferenceroom.id
verweist . Wenn Sie Ihren code
möchten das Identifikationsfeld für ConferenceRoom
sein Entität, verwenden Sie dann keinen Ersatzschlüssel. Wenn der code
Spalte kein PK-Kandidat ist, dann ist sie auch kein FK-Kandidat.
Zweiter :
Bestehen :
Ich glaube, Sie haben merge
verwechselt mit persist
. Soweit ich anhand des bereitgestellten Codes erkennen kann, erstellen Sie einen neuen ConferenceRoom
und keine bestehenden ändern. Daher merge
wird nicht das tun, was Sie wollen. Versuchen Sie, Ihre (bereitgestellte) Methode wie folgt zu ändern:
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);
}
Diese Dinge sollten die von Ihnen angesprochenen Probleme beheben.