Mysql
 sql >> Base de données >  >> RDS >> Mysql

Hibernate @Version provoquant l'échec de la contrainte de clé étrangère de la base de données

Premier :

Votre FK doit faire référence au PK de l'entité référencée. Dans le cas présent, vous devriez avoir person.conference_room_id qui fait référence à conferenceroom.id . Si vous voulez votre code être le champ d'identification de la ConferenceRoom entité, alors n'utilisez pas de clé de substitution. Si le code colonne n'est pas un candidat PK, alors ce n'est pas non plus un candidat FK.

Deuxième :

Fusionner :

Persister :

Je pense que vous avez confondu merge avec persist . D'après ce que je peux dire par le code fourni, vous créez une nouvelle ConferenceRoom et ne pas en modifier un existant. Par conséquent, merge ne va pas faire ce que vous voulez qu'il fasse. Essayez de changer votre méthode (fournie) par la suivante :

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

Ces éléments devraient résoudre les problèmes que vous avez soulevés.