我们正在开发一个每秒有多个请求的WebSite .-
我们当前的环境是JavaEE,JBoss 4.2.3,Struts2 for MVC,JPA,Hibernate为ORM,Postgres为DB .-
这就是场景:每当一个请求到达任何页面时,某些操作会检查数据库中的信息以填充所请求的页面(该信息由几个实体组成,其中一些实体具有集合映射,一些是懒惰的,一些急于);它一切正常,直到我们收到几个(不多... 2是足够的XD)并发请求,然后hibernate在获取该信息时抛出“OptimisticLockException”。
最有趣的是我们只阅读信息!!从不写!!
也许我们忽略了某些东西或类似的东西......任何帮助都会受到赞赏。
提前致谢。
答案 0 :(得分:3)
也许你的交易控制有问题。如果你在视图中使用open-session,请确保将事务设置为只读,否则如果你执行obj.setXX()它会引发更改,而hibernate将尝试更新表。
查看交易隔离策略的配置。
Finnaly,确保正确实现版本属性及其映射;和equals和hashcode方法(特别是在使用集合时)。