java - next_val - jpa id autoincrement
GenerationType.AUTO vs GenerationType.IDENTITY en hibernaciĆ³n (2)
Actualmente estamos usando mysql como base de datos y usamos
@Generated Value(strategy = GenerationType.IDENTITY)
Está funcionando perfectamente en ciertas situaciones, necesitamos migrar nuestra base de datos a Oracle en ese momento, no está funcionando correctamente. ¿Si alguien sabe cuál es la diferencia real presente detrás de esto y cómo está funcionando?
¿Cómo podría "funcionar correctamente" (no define información básica como lo que quiere decir con eso) con Oracle? No veo la relevancia de AUTO
para su pregunta, eso simplemente permite que una implementación elija lo que quiere usar.
" IDENTITY
" (según JPA jadadocs y especificaciones - a lo que debería referirse) significa autoincremento . No existe tal concepto en Oracle, pero sí lo hay en MySQL, SQLServer y algunos otros. Espero que cualquier implementación de JPA decente marque un error incluso cuando se intenta tal cosa.
Sin embargo, Oracle permitiría usar las estrategias " SEQUENCE
" o " TABLE
"
Citar la persistencia / identidad de Java y la secuenciación :
La secuencia de identidades utiliza columnas de IDENTIDAD especiales en la base de datos para permitir que la base de datos asigne automáticamente una identificación al objeto cuando se inserta su fila. Las columnas de identidad son compatibles con muchas bases de datos, como MySQL, DB2, SQL Server, Sybase y Postgres . Oracle no admite columnas de IDENTIDAD, pero se pueden simular mediante el uso de objetos de secuencia y disparadores.
así que prefiero usar SECUENCIA en lugar de
Los objetos de secuencia utilizan objetos especiales de base de datos para generar ID. Los objetos de secuencia solo se admiten en algunas bases de datos, como Oracle, DB2 y Postgres. Por lo general, un objeto SEQUENCE tiene un nombre, un INCREMENTO y otras configuraciones de objetos de la base de datos. Cada vez que se selecciona .NEXTVAL, la secuencia se incrementa con el INCREMENTO.
Ejemplo:
@Entity
public class Employee {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="EMP_SEQ")
@SequenceGenerator(name="EMP_SEQ", sequenceName="EMP_SEQ", allocationSize=100)
private long id;
...
}