【问题标题】:Can't set sequenceGenerator when generator strategy set to IDENTITY生成器策略设置为 IDENTITY 时无法设置 sequenceGenerator
【发布时间】:2015-04-24 06:00:35
【问题描述】:

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

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

【问题讨论】:

  • 我认为使用 IDENTITY 时分配大小无关紧要,因为在插入行时没有 nextval() 请求。但是我仍然想在创建表时设置初始序列值。

标签: postgresql symfony doctrine-orm doctrine


【解决方案1】:

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 各个工厂线来澄清您的期望。

【讨论】:

    【解决方案2】:

    因此,请仅与 @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

    【讨论】:

      猜你喜欢
      • 2021-02-13
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      相关资源
      最近更新 更多