問題:
2 人の管理者 -> Admin1 と Admin2 異なる端末から同時に UserA を変更します。
User エンティティと UserGroup エンティティの間には多対多の関係があります。
ここで、Admin1 が Group1 を UserA に割り当てると、情報が保存されます。また、別の端末の Admin2 が Group2 を UserA に割り当てると、情報は保存されますが、Admin1 が行った変更は上書きされます。DB をチェックインすると、UserA は Group2 に割り当てられますが、Admin2 は Admin1 による変更を認識していません。
- これは楽観的な状況ですか?
- これが楽観的な状況である場合、OptimisticLockException がスローされないのはなぜですか?
- Admin1 が行った変更を Admin2 に通知するにはどうすればよいですか。
以下のように Eclipselink を使用します。
@ManyToMany
@JoinTable(name = "user_group", joinColumns = { @JoinColumn(name = "user_group_id", referencedColumnName = "id") }, inverseJoinColumns = { @JoinColumn(name = "user_id", referencedColumnName = "id") })
private List<User> userList;
@ManyToMany
@JoinTable(name = "user_group",joinColumns = { @JoinColumn(name = "user_id", referencedColumnName = "id") }, inverseJoinColumns = { @JoinColumn(name = "user_group_id", referencedColumnName = "id") })
private List<UserGroup> userGroupList;
@Version アノテーションは、各操作で更新されるバージョン列にマークされます。
私の側からさらに情報が必要な場合はお知らせください。