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

时间:2011-01-05 02:07:34

标签: java jpa optimistic-locking toplink-essentials

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

以下是该方案。

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

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

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

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

    归还你; //回复浏览器

  3. 在此,我的困惑是用户表格"version"的{​​{1}}列。

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

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

    如果您需要更多说明,请与我们联系。

1 个答案:

答案 0 :(得分:5)

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

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

  

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

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