麻烦使用Doctrine 2注释@GeneratedValue(strategy =“AUTO”)

时间:2011-05-25 05:18:31

标签: doctrine-orm

希望有人可以帮助我解决这个问题。我有以下学说注释:

/**
 * @var integer 
 *
 * @Column(name="code", type="integer", length=4)
 * @Id
 * @GeneratedValue(strategy= "AUTO")
 */
private $code;

代码是我的表主键。 我想要的是每次在表中插入一行时(自动)正确设置的代码值。

我正在使用Doctrine 2和PostgreSQL,问题是: 为了提前准备数据库,我直接在PgAdmin中使用SQL命令将行插入表中。 然后我尝试插入新行,但这次通过我的程序,每次我尝试插入此行时,我都会遇到主键冲突,直到我尝试使用SQL命令之前插入的行数次。

例如,如果我使用SQL命令插入3行,则必须使用该程序尝试3次,并且在第4次尝试时,该行将被正确插入。

有没有办法将初始主键值设置为4(当然这个值取决于在运行程序之前使用SQL命令插入的行数)以避免主键冲突?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您手动在表中插入值,自行分配代码值:

insert into table (code, ... ) values (1, ...)

在这种情况下,您的序列值不会增加。因此,当Doctrine尝试向数据库插入新行时,它将使用序列进行自动编号。串行状态仍为值1,这会导致主键冲突。虽然查询失败,但序列会增加1,因此下次尝试使用值2时。这解释了为什么在三次尝试之后,您不再发生主键冲突。

希望这个解释有所帮助。

祝你好运!