原则2:Oracle插入触发器
我目前开始使用symfony2框架和doctrine2 在这里,当我想插入一个对象时,使用条令有以下问题 下列特定情况:原则2:Oracle插入触发器,oracle,symfony,doctrine-orm,Oracle,Symfony,Doctrine Orm,我目前开始使用symfony2框架和doctrine2 在这里,当我想插入一个对象时,使用条令有以下问题 下列特定情况: 该表使用一个序列,该序列在插入之前通过生成ID 触发 该序列也被其他表使用,因此没有名称 约定类似:$table->getName()_序号';(见 条令/DBAL/Platforms/OraclePlatform.php getIdentitySequenceName()) 应该使用id的序列称为:general_data_seq 表和触发器的设计是给定的,不能更改 我
- 该表使用一个序列,该序列在插入之前通过生成ID 触发
- 该序列也被其他表使用,因此没有名称 约定类似:$table->getName()_序号';(见 条令/DBAL/Platforms/OraclePlatform.php getIdentitySequenceName())
- 应该使用id的序列称为:general_data_seq
- 表和触发器的设计是给定的,不能更改
/**
* @ORM\Entity
* @ORM\Table(name="test")
*
*/
class Test
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\Column(type="string")
*/
private $name;
/**
* @param int $id
*/
public function setId($id)
{
$this->id = $id;
}
/**
* @return string
*/
public function getName() : string
{
return $this->name;
}
/**
* @return string
*/
public function setName(string $name)
{
$this->name = $name;
}
}
如果我想用这样的原则来保存这个
$em = $this->getDoctrine()->getManager();
$test = new Test();
$test->setName('Max');
$em->persist($test);
$em->flush();
我得到的信息是:
ORA-02289:序列不存在
什么是正确的,因为应该使用的序列确实不存在
我现在的问题是:如何在这里使用docrine,以便持久化实体具有由触发器生成的插入id
我在这里发现了一个相关的问题:
在这里:
但是他们中的Nitter帮助我找到了一个解决方案,因为他们仍然基于使用名为sequence的表。为了避免让你头疼的问题:只有当它“拥有”模式时才使用条令ORM。为了避免让你头疼的问题:只有当它“拥有”模式时才使用条令ORM。