【发布时间】:2015-12-28 01:37:21
【问题描述】:
我们已经将我们的应用程序部署在两个具有集群环境的应用程序服务器(Tomcat 服务器)中。现在请求同时来自两台服务器,因此发生并发问题,这意味着它正在数据库中创建重复条目。 场景是: 1.请求(交易)A更新数据 2.请求(交易)B同时更新数据 3. 两行将添加到该表中。其中一个是重复的。
假设我有以下签名的方法
请求一个
updateData() {
//get entity manager
//start transcation tx
//persist
//commit tx
}
请求 B
updateData() {
//get entity manager
//start transcation tx
//persist
//commit tx
}
我们希望防止出现这种情况。请求 A 只应将数据持久保存到该表中。帮助我们解决这个问题。 #谢谢 环境详情:JPA 2.1 和 Oracle 数据库
【问题讨论】:
-
为什么更新操作会插入行?或者你的意思是说第二次更新覆盖了第一次更新,而第二次更新不知道第一次更新。
-
应用程序有什么方法可以告诉它们是重复请求吗?也许某些东西唯一地标识了对象,并将数据库中的该字段或字段集标记为唯一,因为这会导致第二个事务失败。否则,您需要查看服务器本身的解决方案,以免“相同”请求被重复并发送到多个服务器。
-
表上没有唯一的约束可以防止第二个请求失败吗?
标签: java spring hibernate jpa oracle11g