最初 :
FKは、参照されるエンティティのPKを参照する必要があります。この場合、person.conference_room_id
が必要です。 conferenceroom.id
を参照します 。 code
が必要な場合 ConferenceRoom
の識別フィールドになります エンティティの場合は、代理キーを使用しないでください。 code
の場合 列はPK候補ではないため、FK候補でもありません。
2番目 :
マージ :
永続化 :
merge
を混乱させたと思います persist
を使用 。提供されたコードからわかることから、新しいConferenceRoom
を作成していることになります。 既存のものを変更しません。したがって、merge
あなたがしたいことをするつもりはありません。 (提供されている)メソッドを次のように変更してみてください:
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);
}
これらのことで、提起した問題が修正されるはずです。