Först :
Din FK bör referera till PK för den refererade enheten. I det här fallet bör du ha person.conference_room_id
som refererar till conferenceroom.id
. Om du vill ha din code
vara identifieringsfältet för ConferenceRoom
enhet, använd då inte en surrogatnyckel. Om code
kolumn är inte en PK-kandidat, då är den inte heller en FK-kandidat.
Andra :
Bestå :
Jag tror att du har förvirrat merge
med persist
. Vad jag kan se av den medföljande koden skapar du ett nytt ConferenceRoom
och inte ändra en befintlig. Därför merge
kommer inte att göra vad du vill att den ska göra. Försök att ändra din (medföljande) metod till följande:
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);
}
Dessa saker bör lösa de problem du har tagit upp.