2014-03-25 51 views
0

我在一个Java类中使用@Version,并且所有的Java类都扩展了这个。好。 我也使用objectForm。我使用它是因为它被认为更安全(我隐藏所有来自JSP的<form:hidden path="XX"/>),但是当我在浏览器中打开两个选项卡时,如果我在两个选项卡中修改和安全对象,Spring将不检查版本是低于数据库的数据并保存。如果我不使用对象形式,Spring会提醒我该版本较低。是的,objectForm是强制性的。@Version Spring不与ObjectForm一起工作

这个想法是:我发送在JSP的ObjectForm。我从jsp修改对象,然后将对象窗体返回给控制器。这样,将objectForm转换为对象并保存该对象。

有什么想法?

一些照片:

enter image description here

enter image description here

回答

0

@Version注释只能在Hibernate的实体类,即直接保存到数据库中。

如果你这样做了以下的@Version将被验证,抛出一个异常,如果有无效的版本的对象是试图保存在数据库:

  • 从数据库中读取与@Version注释实体
  • 复制实体的数据的视图层对象(包括版本)
  • 修改视图层
  • 上保存按钮按压,复制形式的数据包括版本到一个新的实体对象
  • 要保存新数据,请拨打entityManager.merge()
  • 合并将触发数据库选择。如果数据库中的版本高于合并对象,您将获得StaleObjectException
+0

感谢您的回答,但不工作。 我意识到这些步骤。唯一的区别是我不使用entityManager.merge(项目),我使用“aRepository”.save(项目),然后调用entityManager.merge(项目)。 – davidad

相关问题