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.