使用Doctrine和Symfony违反了Oracle序列主键

时间:2017-03-03 09:49:00

标签: database oracle doctrine-orm symfony

我在Oracle中有一个表,其中包含一些具有不同主键的值,例如值1,2,27,125 ......

在我在Symfony的实体中,注释是:

 * @ORM\Column(name="MY_KEY", type="decimal")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="SEQUENCE")
 * @ORM\SequenceGenerator(sequenceName="TABLE_MY_KEY_seq", allocationSize=1, initialValue=1)

在Oracle中生成的序列是:

Oracle sequence

当我在该表中插入一个新的寄存器时,doctrine尝试插入第一个位置(id = 1),因此我有一个错误(PK违反,主键重复),然后尝试第二个位置(相同的错误。 ..)直到发现我空位。我们遇到相同的错误后N次,因为尝试插入值为27 o 125且已在数据库中的主键。 ¿我该如何控制它?因为从第一次开始,我需要在数据库中包含这些值,而我不知道它们将是什么值。

谢谢:)

1 个答案:

答案 0 :(得分:0)

你应该改变顺序。假设表中的最大ID为1500,然后运行

ALTER SEQUENCE TABLE_MY_KEY_seq MAXVALUE 1500;

你的第一个身份证是1501。 否则,您应该实现自己的自定义策略,如此处所述 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html#identifier-generation-strategies