我有一个继承自另一个表(类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在构成主键的所有字段上进行标记注释。