0

我有一个由许多应用程序访问的产品表,每个应用程序都有几个用户。我想避免冲突,但在我检测到的一小部分代码中可能会发生冲突。

$item = $em->getRepository('MyProjectProductBundle:Item')
           ->findOneBy(array('product'=>$this, 'state'=>1));

if ($item)
{
    $item->setState(3);
    $item->setDateSold(new \DateTime("now"));
    $item->setDateSent(new \DateTime("now"));

    $dateC = new \DateTime("now");
    $dateC->add(new \DateInterval('P1Y'));
    $item->setDateGuarantee($dateC);

    $em->persist($item);
    $em->flush();

   //...after this, set up customer data, etc.
}

一个选项可以是 make 2persist()flush(),第一个选项是在状态更改之后,但在这样做之前,我想知道是否有一种方法可以提供更多保证。

我不认为交易是一种解决方案,因为该过程实际上涉及许多其他操作,因此将它们包装在交易中会迫使许多回滚和失败的销售,使情况变得更糟。

Tha 数据库是 Postgress。

还有其他想法吗?

4

1 回答 1

0

我的第一个想法是看乐观锁定。最终结果是,如果有人更改了您下方的基础数据,则学说将在刷新时抛出异常。但是,这可能并不容易,因为您说您有多个应用程序在中央数据库上运行——尚不清楚您是否可以控制这些应用程序,并且您需要这样做,因为它们都需要配合使用乐观锁定方案并在运行更新时更新版本列。

于 2013-06-05T22:00:09.107 回答