希望有人能帮我解决这个问题。我有以下教义注释:
/**
* @var integer
*
* @Column(name="code", type="integer", length=4)
* @Id
* @GeneratedValue(strategy= "AUTO")
*/
private $code;
其中code是我的表主键。我想要的是每次在表中插入一行时正确地(自动)设置代码值。
我正在使用Doctrin2和PostgreSQL,问题是:为了提前准备数据库,我直接在PgAdmin中使用SQL命令将行插入到表中。然后我尝试插入新行,但这一次是通过我的程序,每次我尝试插入此行时,都会得到一个主键冲突,直到我尝试了与以前使用SQL命令插入的行一样多的次数。
例如,如果我使用SQL命令插入了3行,我将不得不使用程序尝试3次,到第4次时,行将被正确地插入。
有没有办法将初始主键的值设置为4(当然,这个值取决于在运行程序之前已经使用SQL命令插入的行数)以避免主键冲突?
谢谢!
发布于 2011-10-19 16:20:39
我认为您在表中手动插入了值,并自行分配了代码值:
insert into table (code, ... ) values (1, ...)
在这种情况下,您的序列值不会递增。因此,当Doctrine尝试向数据库插入新行时,它将使用序列号进行自动编号。串行状态仍为值1,这会导致主键冲突。尽管查询失败,但序列号会递增1,因此下一次它将尝试使用值2
。这就解释了为什么在三次尝试之后,你不再得到一个主键冲突。
希望这个解释能有所帮助。
祝好运!
https://stackoverflow.com/questions/6119851
复制相似问题