当生成策略设置为IDENTITY时,无法设置sequenceGenerator。

5

我正在尝试使用IDENTITY策略为PostgreSQL设置序列的分配大小和初始值。结果生成的SQL与我的预期不符,但将策略更改为SEQUENCE可以解决。这是故意的吗?

id:
    id:
        type: integer
        id: true
        generator:
            strategy: IDENTITY
        sequenceGenerator:
            sequenceName: table_id_seq
            allocationSize: 10
            initialValue: 100000

我认为在使用IDENTITY时,allocationSize是无关紧要的,因为在插入行时没有nextval()请求。然而,我仍然希望在创建表时设置初始序列值。 - shapeshifter
2个回答

4

Doctrine会在Doctrine\ORM\Mapping\ClassMetadataFactory中初始化ID生成策略。在工厂中有一个大的switch语句,用于切换您在YAML配置中提供的<STRATEGY_NAME>

generator:
    strategy: <STRATEGY_NAME>

所选策略会从您的配置中获取更多可选参数。
所有可用策略均列在Doctrine手册中。 序列生成器策略的选项在下一小节中详细说明。
从您的配置来看,您当前正在设置序列生成器策略的参数,同时告诉Doctrine使用标识符策略。也许这就是您遇到的意外行为?
您可以阅读相应工厂行的源代码以澄清您的期望。

3

因此,只与@GeneratedValue(strategy="SEQUENCE")一起使用。

对于@GeneratedValue(strategy="SEQUENCE")的使用,此注释允许指定有关序列的详细信息,例如序列的增量大小和初始值。

其他Doctrine文档

配置示例:

Message:
  type: entity
  id:
    id:
      type: integer
      generator:
        strategy: SEQUENCE
      sequenceGenerator:
        sequenceName: message_seq
        allocationSize: 100
        initialValue: 1

查看文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接