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.