1

问题:

两个 Admins -> Admin1 和 Admin2 从不同的终端同时修改 UserA。

User 和 UserGroup 实体之间存在多对多关系。

这里发生的是当 Admin1 将 Group1 分配给 UserA 时,信息被保存。当来自不同终端的 Admin2 将 Group2 分配给 UserA 时,保存的信息会覆盖 Admin1 所做的更改。意味着当我签入数据库时​​,UserA 被分配给 Group2,而 Admin2 不知道 Admin1 所做的更改。

  1. 这是乐观的情况吗?
  2. 如果这是乐观的情况,那么为什么不抛出 OptimisticLockException?
  3. 我将如何通知 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 注释标记在每个操作上更新的版本列上。

如果您需要我这边的更多信息,请告诉我。

4

1 回答 1

0

当 group1 分配给 user1 时,保存最后修改的时间戳。下次请求获取 user1 详细信息时,请确保您提供上次修改日期以及其他详细信息。当 admin1 修改请求时,要求他提供与您在获取操作期间提供的相同的上次修改日期。在保存 requestrequest 之前,比较上次修改日期与您提供给 admin1 的日期是否相同。基本上这里最后修改日期是一种令牌。您存储一个令牌,向访问数据的用户提供相同的令牌,然后当用户修改数据并将其发送以进行持久操作时,确保数据库中的令牌与用户发回给您的一个匹配,否则这意味着记录已被修改并且令牌在数据库中已更改,并且不允许用户保留错误数据。

希望这可以帮助。

于 2013-10-06T19:11:13.100 回答