Mysql
 sql >> Database >  >> RDS >> Mysql

Hibernate @Version causa l'errore del vincolo della chiave esterna del database

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 :

Persistere :

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.