原则2:Oracle插入触发器

原则2:Oracle插入触发器,oracle,symfony,doctrine-orm,Oracle,Symfony,Doctrine Orm,我目前开始使用symfony2框架和doctrine2 在这里,当我想插入一个对象时,使用条令有以下问题 下列特定情况: 该表使用一个序列,该序列在插入之前通过生成ID 触发 该序列也被其他表使用,因此没有名称 约定类似:$table->getName()_序号';(见 条令/DBAL/Platforms/OraclePlatform.php getIdentitySequenceName()) 应该使用id的序列称为:general_data_seq 表和触发器的设计是给定的,不能更改 我

我目前开始使用symfony2框架和doctrine2

在这里,当我想插入一个对象时,使用条令有以下问题

下列特定情况:

  • 该表使用一个序列,该序列在插入之前通过生成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。