问题:
两个管理员 - > Admin1和Admin2同时修改不同终端的UserA。
User和UserGroup实体之间存在多对多关系。
这里发生的事情是当Admin1将Group1分配给UserA时,信息被保存。 当来自不同终端的Admin2将Group2分配给UserA时,保存的信息会覆盖Admin1所做的更改。表示我在签入数据库时,UserA被分配到Group2,而Admin2不知道Admin1所做的更改。
使用如下的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注释标记在版本列上,该列在每个操作上都会更新。
请知道您是否需要我方提供更多信息。
答案 0 :(得分:0)
将group1分配给user1时,保存上次修改的时间戳。下次请求获取user1详细信息时,请确保提供上次修改日期以及其他详细信息。当admin1修改请求时,请求他提供您在get操作期间提供的相同的最后修改日期。在保存请求请求之前,将上次修改日期与您提供给admin1的日期进行比较。基本上这里最后修改日期是一种令牌。您存储令牌,为访问数据的用户提供相同的令牌,然后当用户修改数据并将其发送以进行持久操作时,请确保数据库中的令牌与用户已发回给您的令牌相匹配,这意味着该记录已被修改并且令牌在数据库中更改,不允许用户持久存储错误数据。
希望这有帮助。