希望有人能帮我解决这个问题。我有以下学说注释:
/**
* @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命令已经插入的行数)以避免主键冲突?
谢谢!
最佳答案
我认为您在表中手动插入了值,并自行分配了代码的值:
插入表 (code, ...) 值 (1, ...)
在这种情况下,您的序列值不会增加。因此,当 Doctrine 尝试向数据库中插入新行时,它将使用序列号进行自动编号。序列状态仍然为值 1,这会导致主键冲突。虽然查询失败了,但是 serial 加了 1,所以下次它会尝试使用值 2
。这解释了为什么在尝试三次后,您不再遇到主键冲突。
希望这个解释对您有所帮助。
祝你好运!
关于doctrine-orm - 使用 Doctrine 2 注释 @GeneratedValue(strategy ="AUTO") 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6119851/