Подтвердить что ты не робот

Различия между стратегиями GeneratedValue

В документах Doctrine упоминается, что существует несколько разных стратегий для аннотации @GeneratedValue:

  • AUTO
  • SEQUENCE
  • TABLE
  • IDENTITY
  • UUID
  • CUSTOM
  • NONE

Кто-нибудь, пожалуйста, объяснит различия между всеми этими стратегиями?

4b9b3361

Ответ 1

Проверьте последнюю документацию доктрины

Вот резюме: список возможных стратегий генерации:

АВТО (по умолчанию): говорит Doctrine о выборе стратегии, которая предпочтительнее используемой платформы баз данных. Предпочтительными стратегиями являются IDENTITY для MySQL, SQLite и MsSQL и SEQUENCE для Oracle и PostgreSQL. Эта стратегия обеспечивает полную переносимость.

SEQUENCE: Сообщает Doctrine, чтобы использовать последовательность базы данных для генерации ID. В настоящее время эта стратегия не обеспечивает полной мобильности. Последовательности поддерживаются Oracle и PostgreSql.

ИДЕНТИФИКАЦИЯ: Сообщает Doctrine использовать специальные столбцы идентификации в базе данных, которые генерируют значение при вставке строки. В настоящее время эта стратегия не обеспечивает полной переносимости и поддерживается следующими платформами:

  • MySQL/SQLite = > AUTO_INCREMENT
  • MSSQL = > IDENTITY
  • PostgreSQL = > SERIAL

TABLE: Сообщает Doctrine о том, чтобы использовать отдельную таблицу для генерации ID. Эта стратегия обеспечивает полную мобильность. Эта стратегия еще не реализована!

НЕТ: Сообщает Doctrine, что идентификаторы назначаются и, таким образом, генерируются вашим кодом. Назначение должно выполняться до того, как новый объект будет передан EntityManager # persist. NONE - это то же самое, что полностью оставить @GeneratedValue.

ВЕРСИЯ 2.3:

UUID: Сообщает, что Doctrine использует встроенный универсальный генератор уникальных идентификаторов. Эта стратегия обеспечивает полную переносимость.

Ответ 2

Разумеется, принятый ответ правильный, но ему требуется небольшое обновление следующим образом:

В соответствии с Аннотация раздела документации:

Эта аннотация необязательная, а имеет значение только при, используемом вместе с @Id. Если эта аннотация не указана с помощью @Id, по умолчанию используется стратегия НЕТ.

Атрибут стратегии необязательный.

В соответствии с Основным отображением раздела документации:

SEQUENCE: указывает Doctrine на использование последовательности базы данных для генерации идентификатора. В настоящее время эта стратегия не обеспечивает полной мобильности. Последовательности поддерживаются Oracle, PostgreSql и SQL Anywhere.

IDENTITY: указывает Doctrine на использование специальных столбцов идентификации в базе данных, которые генерируют значение при вставке строки. В настоящее время эта стратегия не обеспечивает полной переносимости и поддерживается следующими платформами:

  • MySQL/ SQLite/ SQL Anywhere (AUTO_INCREMENT)
  • MSSQL (IDENTITY)
  • PostgreSQL (SERIAL).

Downvote

Что касается нисходящего потока, данные кем-то, следует отметить, что SQL Anywhere добавлен, а принятому ответу требуется небольшое обновление.