sql >> Base de Datos >  >> RDS >> Mysql

Hibernate @Version que causa la falla de la restricción de clave externa de la base de datos

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 :

Persistir :

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.