在Doctrine文档中,他们提到@GeneratedValue注释存在一些不同的策略:
AUTOSEQUENCETABLEIDENTITYUUIDCUSTOMNONE有人请解释所有人的策略之间的差异吗?
BAD*_*med 76
查看最新的学说文档
以下是摘要:可能的生成策略列表:
AUTO(默认值):告诉Doctrine选择所使用的数据库平台首选的策略.首选策略适用IDENTITY于MySQL,SQLite和MsSQL以及SEQUENCEOracle和PostgreSQL.该策略提供了完全的可移植性.
SEQUENCE:告诉Doctrine使用数据库序列进行ID生成.该策略目前不提供完全的可移植性.Oracle和PostgreSql支持序列.
IDENTITY:告诉Doctrine在数据库中使用特殊标识列,这些列在插入行时生成值.此策略目前不提供完全可移植性,并受以下平台支持:
AUTO_INCREMENTIDENTITY SERIAL表:告诉Doctrine使用单独的表进行ID生成.该策略提供了完全的可移植性.这个策略尚未实施!
NONE:告诉Doctrine标识符由您的代码分配并由此生成.必须在将新实体传递给EntityManager#persist之前进行分配.NONE就像@GeneratedValue完全放弃一样.
UUID:告诉Doctrine使用内置的通用唯一标识符生成器.该策略提供了完全的可移植性.
当然接受的答案是正确的,但它需要一个小的更新如下:
根据文档的注释部分:
这个注解是可选的,只有在与@Id 结合使用时才有意义。如果未使用 @Id 指定此注释,则默认使用NONE策略。
策略属性是可选的。
根据文档的基本映射部分:
SEQUENCE:告诉 Doctrine 使用数据库序列来生成 ID。此策略目前不提供完全的可移植性。Oracle、PostgreSql和SQL Anywhere支持序列。
IDENTITY: 告诉 Doctrine 在数据库中使用特殊的标识列,在插入行时生成一个值。此策略目前不提供完整的可移植性,并受以下平台支持:
- MySQL / SQLite / SQL Anywhere (AUTO_INCREMENT)
- MSSQL(身份)
- PostgreSQL(串行)。
关于某人给出的否决票,应注意已添加SQL Anywhere并且接受的答案需要小幅更新。
| 归档时间: | 
 | 
| 查看次数: | 43121 次 | 
| 最近记录: |