JPA乐观锁版本处理 - 版本值应该被带到客户端还是?

mas*_*san 3 java jpa optimistic-locking toplink-essentials

我想知道如何使用JPA(toplink essentials)从服务器到客户端处理实体类中的乐观锁版本属性,反之亦然.

这是场景.

  1. 从浏览器用户发送请求到服务器,要求编辑个人用户信息.

  2. 服务器处理请求并将结果返回给浏览器.服务器代码类似于:

    EntityManager em = EmProvider.getInstance().getEntityManagerFactory().createEntityManager();

    用户u =(用户)em.find(User.class,myUserId);

    回报你; //回复浏览器

在这里,我的困惑是User表有"version"optimistic locking.

这意味着版本字段的值也会被发送回客户端,即使客户端(我或任何人)永远不会使用它.版本字段将用于服务器端代码.

那么将版本号发送给客户端是否正确?因为否则我无法弄清楚如何检查版本号,以防用户点击带有修改数据的网页上的"更新"按钮.

如果您需要更多说明,请告诉我.

Thi*_*ilo 5

是的,您可以将版本号发送给客户端,以便他以后可以将其发送回服务器(以及他想对实体进行的更改),谁可以使用它来检查冲突的更新.

服务器如何知道要检查哪个版本?(也可以将数字放在服务器端会话中,但这基本上是同一主题的变体).关键是当您"签出"要编辑的版本时,您将携带该时间点的版本号.

这意味着版本字段的值也会被发送回客户端,即使客户端(我或任何人)永远不会使用它.

好吧,你可以在客户端上使用它.例如,如果编辑操作需要很长时间,则客户端可以偶尔轮询一次实体是否已同时更新,然后向用户提醒它.(类似于Stackoverflow上的"已发布新答案"消息).