2015-10-06 145 views
3

我们有一个在Load Balancer下运行的Web应用程序。两个用户正在尝试执行相同的操作,例如,两个用户在同一时间创建相同的订单,创建重复的订单。在Spring中处理脏读,使用JPA处理Hibernate

在一个事务提交之前,另一个请求正在检查是否有任何order.It创建重复条目。两个请求都试图同时处理。

  1. 用户A & B同时提交订单。
  2. 用户A的交易验证,是否有相同订单的任何现有条目。如果相同订单没有其他条目,则会创建条目。
  3. 用户B的交易也验证并创建相同。
  4. 如果A的交易完成,那么B的交易不会发生。但事务提交之前,这两种请求是有效的,所以它的同一笔订单创建两个条目(重复)

我们已经尝试了下面的选项,

  1. 锁与锁类型的EntityManager作为同步
  2. 隔离级别为Serializable

但没有作为OPTIMISTIC_FORCE_INCREMENT

  • 制作方法选项有所帮助。

    请提出如何继续。

    由于

  • +0

    您是否尝试在数据库中添加任何约束? –

    +0

    当你说重复时,你是说订单号码是一样的吗?或者两个用户都试图为同一客户输入完全相同的订单? –

    +0

    @ AmmSokun-我们不能做数据库约束。该订单可能已取消。 – Pandiyan

    回答

    0

    设置包含下一顺序号单独的数据库表。

    将创建订单拆分为两个单独的数据库事务。

    第一个读取并更新订单号。

    第二个存储订单信息。

    处理订单时,如果第一笔交易失败,则应在重新开始第二笔交易之前重试。

    相关问题