gpt4 book ai didi

doctrine-orm - 使用 Doctrine 2 注释 @GeneratedValue(strategy ="AUTO") 时遇到问题

转载 作者:行者123 更新时间:2023-12-04 04:38:12 25 4
gpt4 key购买 nike

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

/**
* @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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com