Prima :
Il tuo FK dovrebbe fare riferimento al PK dell'entità referenziata. Nel caso specifico, dovresti avere person.conference_room_id
che fa riferimento a conferenceroom.id
. Se vuoi il tuo code
essere il campo identificativo per la ConferenceRoom
entità, quindi non utilizzare una chiave surrogata. Se il code
la colonna non è un candidato PK, quindi non è nemmeno un candidato FK.
Secondo :
Unisci :
Penso che tu abbia confuso merge
con persist
. Da quello che posso dire dal codice fornito, stai creando una nuova ConferenceRoom
e non modificarne uno esistente. Pertanto, merge
non farà quello che vuoi che faccia. Prova a cambiare il metodo (fornito) nel seguente:
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);
}
Queste cose dovrebbero risolvere i problemi che hai sollevato.