В документах Doctrine упоминается, что существует несколько разных стратегий для аннотации @GeneratedValue
:
-
AUTO
-
SEQUENCE
-
TABLE
-
IDENTITY
-
UUID
-
CUSTOM
-
NONE
Кто-нибудь, пожалуйста, объяснит различия между всеми этими стратегиями?
В документах Doctrine упоминается, что существует несколько разных стратегий для аннотации @GeneratedValue
:
AUTO
SEQUENCE
TABLE
IDENTITY
UUID
CUSTOM
NONE
Кто-нибудь, пожалуйста, объяснит различия между всеми этими стратегиями?
Проверьте последнюю документацию доктрины
Вот резюме: список возможных стратегий генерации:
АВТО (по умолчанию): говорит Doctrine о выборе стратегии, которая предпочтительнее используемой платформы баз данных. Предпочтительными стратегиями являются IDENTITY
для MySQL, SQLite и MsSQL и SEQUENCE
для Oracle и PostgreSQL. Эта стратегия обеспечивает полную переносимость.
SEQUENCE: Сообщает Doctrine, чтобы использовать последовательность базы данных для генерации ID
. В настоящее время эта стратегия не обеспечивает полной мобильности. Последовательности поддерживаются Oracle и PostgreSql.
ИДЕНТИФИКАЦИЯ: Сообщает Doctrine использовать специальные столбцы идентификации в базе данных, которые генерируют значение при вставке строки. В настоящее время эта стратегия не обеспечивает полной переносимости и поддерживается следующими платформами:
AUTO_INCREMENT
IDENTITY
SERIAL
TABLE: Сообщает Doctrine о том, чтобы использовать отдельную таблицу для генерации ID
. Эта стратегия обеспечивает полную мобильность. Эта стратегия еще не реализована!
НЕТ: Сообщает Doctrine, что идентификаторы назначаются и, таким образом, генерируются вашим кодом. Назначение должно выполняться до того, как новый объект будет передан EntityManager # persist. NONE
- это то же самое, что полностью оставить @GeneratedValue
.
UUID: Сообщает, что Doctrine использует встроенный универсальный генератор уникальных идентификаторов. Эта стратегия обеспечивает полную переносимость.
Разумеется, принятый ответ правильный, но ему требуется небольшое обновление следующим образом:
В соответствии с Аннотация раздела документации:
Эта аннотация необязательная, а имеет значение только при, используемом вместе с @Id. Если эта аннотация не указана с помощью @Id, по умолчанию используется стратегия НЕТ.
Атрибут стратегии необязательный.
В соответствии с Основным отображением раздела документации:
SEQUENCE
: указывает Doctrine на использование последовательности базы данных для генерации идентификатора. В настоящее время эта стратегия не обеспечивает полной мобильности. Последовательности поддерживаются Oracle, PostgreSql и SQL Anywhere.
IDENTITY
: указывает Doctrine на использование специальных столбцов идентификации в базе данных, которые генерируют значение при вставке строки. В настоящее время эта стратегия не обеспечивает полной переносимости и поддерживается следующими платформами:
- MySQL/ SQLite/ SQL Anywhere (AUTO_INCREMENT)
- MSSQL (IDENTITY)
- PostgreSQL (SERIAL).
Что касается нисходящего потока, данные кем-то, следует отметить, что SQL Anywhere добавлен, а принятому ответу требуется небольшое обновление.