我在编写 symfony2 应用程序时遇到了问题。
情况:我想创建实体“A”的副本,然后修改其属性“foo”。但是,A 和 Foo 通过 OneToOne 关系关联,这会触发错误:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '9' for key
UNIQ_41A6A445D7FA9592
我的实体如下:
/**
* AcmeBundle\Entity\A
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="AcmeBundle\Entity\ARepository")
*/
class A
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\OneToOne(targetEntity="Mvcc\AcmeBundle\Entity\Foo")
*
*/
protected foo;
getFoo(){
return $this->foo;
}
setFoo($foo){
$this->foo = $foo;
return $this;
}
}
问题:在我的控制器中,我执行以下操作:
/*start*/
/*1) I create a clone aBis of a, instance of A.its foo attribute is connected to foo1.*/
$aBis = clone($a);
/*2) I modify the attribute foo for a */
$foo2 = new Foo();
$a->setFoo($foo2);
$em->persist($foo2)
$em->persist($aBis);
$em->persist($a);
$em->flush();
/*end*/
我猜想,当涉及到刷新时,“a”和“aBis”在某些时候都具有属性 foo1 的事实不会让学说继续下去,并看到 $a 将其属性更改为新的 foo。你知道如何解决这个问题吗?
我的实际问题要复杂一些(它涉及更深层次的关系和工作单元)。但是,我想我在这里总结了主要问题。
提前谢谢了!
问候,