希望有人可以帮助我解决这个问题。我有以下学说注释:
/**
* @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命令插入的行数)以避免主键冲突?
谢谢!
答案 0 :(得分:0)
我认为您手动在表中插入值,自行分配代码值:
insert into table (code, ... ) values (1, ...)
在这种情况下,您的序列值不会增加。因此,当Doctrine尝试向数据库插入新行时,它将使用序列进行自动编号。串行状态仍为值1,这会导致主键冲突。虽然查询失败,但序列会增加1,因此下次尝试使用值2
时。这解释了为什么在三次尝试之后,您不再发生主键冲突。
希望这个解释有所帮助。
祝你好运!