原则2添加了自动生成序列值的新字段


Doctrine 2 add new field that auto generates sequence values

我有一个继承自另一个表(类B)的表(类a),所以显然表a的主键引用表B的主键。但是,我要做的是向表a添加一个新字段,该字段应该自动增加,并启动一个特定的值,例如1000001。

我已经尝试了多种方法来添加这个新的字段(列)在类A,但我不能让它工作:

Class A extends B {
/**
 * @var integer
 *
 * @ORM'GeneratedValue(strategy="Identity")
 * @ORM'Column(type="integer")
 * @ORM'SequenceGenerator(sequenceName="beer_id", allocationSize=1, initialValue=1000001)
 **/
private $beerIdNumber;

我如何使这个新列自动生成序列值,并可能使它成为一个额外的主键列或唯一的值?

来自Doctrine 2文档:

Sequence Generator目前可以与Oracle或Postgres,并允许一些额外的配置选项除了指定序列的名称之外

对你来说,似乎你所需要的只是使用:

Class A extends B {
/**
 * @var integer
 * @ORM'Id
 * @ORM'GeneratedValue(strategy="Identity")
 * @ORM'Column(type="integer")
 */
 private $beerIdNumber;

也来自文档:

@GeneratedValue指定标识符使用哪个策略生成由@Id注释的实例变量。这注释是可选的,只有在结合使用时才有意义@ id。

如果该注释没有指定@Id,则使用NONE策略作为违约。

然而

复合键

原则2允许使用复合主键。然而也有反对使用单个标识符的一些限制。的使用@GeneratedValue注释仅支持简单的(不支持)注释复合)主键,这意味着您只能使用复合键如果在调用之前自己生成主键值EntityManager#persist()在实体上。

要指定复合主键/标识符,只需输入@Id在构成主键的所有字段上进行标记注释。