generatedvalue autoincrement doctrine2

doctrine2 - autoincrement - @generatedvalue spring



Las diferencias entre las estrategias de GeneratedValue. (2)

Consulta la última documentación de doctrina.

Aquí hay un resumen: la lista de posibles estrategias de generación:

AUTO (predeterminado) : le dice a Doctrine que elija la estrategia que prefiera la plataforma de base de datos utilizada. Las estrategias preferidas son IDENTITY para MySQL, SQLite y MsSQL y SEQUENCE para Oracle y PostgreSQL. Esta estrategia proporciona portabilidad completa.

SECUENCIA: le dice a Doctrine que use una secuencia de base de datos para la generación de ID . Esta estrategia no proporciona actualmente la portabilidad completa. Las secuencias son compatibles con Oracle y PostgreSql.

IDENTIDAD: le dice a Doctrine que use columnas de identidad especiales en la base de datos que generan un valor al insertar una fila. Esta estrategia actualmente no proporciona una portabilidad completa y es compatible con las siguientes plataformas:

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

TABLA: le dice a Doctrine que use una tabla separada para la generación de ID . Esta estrategia proporciona portabilidad completa. ¡Esta estrategia aún no está implementada!

NINGUNO: le dice a Doctrine que los identificadores están asignados y, por lo tanto, generados por su código. La asignación debe realizarse antes de que una nueva entidad pase a EntityManager # persist. NONE es lo mismo que @GeneratedValue el valor @GeneratedValue completo.

DESDE LA VERSIÓN 2.3:

UUID: le dice a Doctrine que use el generador de identificador único universal incorporado. Esta estrategia proporciona portabilidad completa.

En los documentos de Doctrine , mencionan que existen algunas estrategias diferentes para la anotación @GeneratedValue :

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

¿Podría alguien explicar las diferencias entre todas las estrategias?


Por supuesto, la respuesta aceptada es correcta, pero necesita una actualización menor de la siguiente manera:

Según la sección Anotación de la documentación :

Esta anotación es opcional y solo tiene significado cuando se usa junto con @Id. Si esta anotación no se especifica con @Id, la estrategia NINGUNA se usa por defecto.

El atributo de estrategia es opcional .

De acuerdo a la sección de Mapeo Básico de la documentation :

SEQUENCE : le dice a Doctrine que use una secuencia de base de datos para la generación de ID. Esta estrategia no proporciona actualmente la portabilidad completa. Las secuencias son compatibles con Oracle , PostgreSql y SQL Anywhere .

IDENTITY : le dice a Doctrine que use columnas de identidad especiales en la base de datos que generan un valor al insertar una fila. Esta estrategia actualmente no proporciona una portabilidad completa y es compatible con las siguientes plataformas:

  • MySQL / SQLite / SQL en cualquier lugar (AUTO_INCREMENT)
  • MSSQL (IDENTIDAD)
  • PostgreSQL (SERIE).

Vota abajo

Con respecto al voto negativo dado por alguien, se debe tener en cuenta que se agregó SQL Anywhere y que la respuesta aceptada necesita una actualización menor.