在Doctrine文档中,他们提到@GeneratedValue
注释存在一些不同的策略:
AUTO
SEQUENCE
TABLE
IDENTITY
UUID
CUSTOM
NONE
有人请解释所有人的策略之间的差异吗?
BAD*_*med 76
查看最新的学说文档
以下是摘要:可能的生成策略列表:
AUTO(默认值):告诉Doctrine选择所使用的数据库平台首选的策略.首选策略适用IDENTITY
于MySQL,SQLite和MsSQL以及SEQUENCE
Oracle和PostgreSQL.该策略提供了完全的可移植性.
SEQUENCE:告诉Doctrine使用数据库序列进行ID
生成.该策略目前不提供完全的可移植性.Oracle和PostgreSql支持序列.
IDENTITY:告诉Doctrine在数据库中使用特殊标识列,这些列在插入行时生成值.此策略目前不提供完全可移植性,并受以下平台支持:
AUTO_INCREMENT
IDENTITY
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 次 |
最近记录: |