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

标签 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命令已经插入的行数)以避免主键冲突?

谢谢!

最佳答案

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

插入表 (code, ...) 值 (1, ...)

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

希望这个解释对您有所帮助。

祝你好运!

关于doctrine-orm - 使用 Doctrine 2 注释 @GeneratedValue(strategy ="AUTO") 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6119851/

相关文章:

doctrine-orm - Doctrine 2 查询生成器的问题

doctrine-orm - "lifecycle callbacks"和 "entity listeners"之间有什么区别?

symfony - FosRestBundle 不允许使用方法

doctrine-orm - 在 Doctrine2 中保存单个实体

mysql - 为什么 Doctrine 2 迁移在 Symfony 项目中悄无声息地失败了?

php - 如何在 Doctrine 中进行左连接?

php - 如何检查 Doctrine 2 中的实体是否更改?

php - "Class XXX is not a valid entity or mapped super class"在文件系统中移动类后

symfony - Doctrine left join wherejoined table is null 显示结果

symfony - Doctrine2转换错误