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

时间:2015-02-22 23:48:03

标签: postgresql symfony doctrine-orm doctrine

我正在尝试使用PostgreSQL的IDENTITY策略设置序列的分配大小和初始值。这不会产生我预期的SQL,但是将策略更改为SEQUENCE可行。这是为了吗?

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

2 个答案:

答案 0 :(得分:4)

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

generator:
    strategy: <STRATEGY_NAME>

然后,所选策略将从您的配置中获取更多可选参数。

所有可用的策略都列在Doctrine Manual中。 Sequence Generator战略的选项详见following subsection

根据您的配置判断,您当前正在设置Sequence Generator策略的参数,同时告诉Doctrine使用Identifier策略。也许这是您遇到的意外行为?

您可以read the source code 各自的工厂生产线来澄清您的期望。

答案 1 :(得分:3)

因此,只能使用@GeneratedValue(strategy =“SEQUENCE”)。

  

与@GeneratedValue(strategy =“SEQUENCE”)一起使用时,此注释允许指定序列的详细信息,例如序列的增量大小和初始值。

其他doctrine documentation

配置示例:

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

look documentation