作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我当前的项目中,我将 Spring Data JPA 与 Hibernate 一起使用,但认为这是一个更普遍的问题,也应该涵盖“普通”JPA。
我不确定我应该如何处理OptimisticLockException
使用 @Version
时.
由于我的应用程序的工作方式,一些关系有 CascadeType.PERSIST
和 CascadeType.REFRESH
, 其他人也有 CascadeType.MERGE
.
OptimisticLockException
CascadeType.MERGE
。因为那么有问题的实体可能是需要由另一个服务处理的实体(我每个实体类都有一个服务)。
getEntity()
但是如何将其转换为正确的类型,尤其是在使用 CascadeType.MERGE 的情况下?实体可以是多种类型,因此使用
instanceof
的 if/switch想到了,但这看起来像 hell 一样丑陋。
最佳答案
乐观锁定的全部意义在于能够告诉最终用户:嘿,您试图保存这条重要信息,但其他人在背后保存了它,所以您最好刷新信息,决定是否仍然想要保存它并可能输入一些新值,然后重试。
就像 SVN 一样,如果你尝试提交一个文件而其他人之前提交了一个新版本,SVN 会强制你更新你的工作副本并解决潜在的冲突。
所以我会做和 JPA 一样的事情:它让调用者通过抛出异常来决定做什么。此异常应在表示层中处理。
关于JPA:OptimisticLockException 和级联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16083467/
我是一名优秀的程序员,十分优秀!