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.