Primero :
Su FK debe hacer referencia a la PK de la entidad a la que se hace referencia. En el caso actual, debe tener person.conference_room_id
que hace referencia a conferenceroom.id
. Si quieres tu code
ser el campo de identificación de la ConferenceRoom
entidad, entonces no use una clave sustituta. Si el code
columna no es un candidato PK, entonces tampoco es un candidato FK.
Segundo :
Combinar :
Creo que has confundido merge
con persist
. Por lo que puedo decir por el código proporcionado, está creando una nueva ConferenceRoom
y no modificar uno existente. Por lo tanto, merge
no va a hacer lo que quieres que haga. Intente cambiar su método (proporcionado) a lo siguiente:
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);
}
Estas cosas deberían solucionar los problemas que ha planteado.