Først :
Din FK bør referere til PK for den refererede enhed. I dette tilfælde skal du have person.conference_room_id
som refererer til conferenceroom.id
. Hvis du vil have din code
at være identifikationsfeltet for ConferenceRoom
enhed, så brug ikke en surrogatnøgle. Hvis code
kolonne er ikke en PK-kandidat, så er den heller ikke en FK-kandidat.
Anden :
Flet :
Fortsæt :
Jeg tror, du har forvekslet merge
med persist
. Ud fra hvad jeg kan se af den medfølgende kode, opretter du et nyt ConferenceRoom
og ikke ændre en eksisterende. Derfor merge
vil ikke gøre, hvad du vil have den til at gøre. Prøv at ændre din (medfølgende) metode til følgende:
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);
}
Disse ting burde løse de problemer, du har rejst.