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 :
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.