Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Hibernate @Version verursacht einen Datenbank-Fremdschlüssel-Einschränkungsfehler

Zuerst :

Ihr FK sollte auf die PK der referenzierten Entität verweisen. Im vorliegenden Fall sollten Sie person.conference_room_id haben die auf conferenceroom.id verweist . Wenn Sie Ihren code möchten das Identifikationsfeld für ConferenceRoom sein Entität, verwenden Sie dann keinen Ersatzschlüssel. Wenn der code Spalte kein PK-Kandidat ist, dann ist sie auch kein FK-Kandidat.

Zweiter :

Zusammenführen :

Bestehen :

Ich glaube, Sie haben merge verwechselt mit persist . Soweit ich anhand des bereitgestellten Codes erkennen kann, erstellen Sie einen neuen ConferenceRoom und keine bestehenden ändern. Daher merge wird nicht das tun, was Sie wollen. Versuchen Sie, Ihre (bereitgestellte) Methode wie folgt zu ändern:

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); 
}

Diese Dinge sollten die von Ihnen angesprochenen Probleme beheben.