Posterior a consultar expertos en la materia, programadores de diversas ramas y profesores dimos con la respuesta a la cuestión y la plasmamos en esta publicación.
Solución:
-
Sí, tu análisis es correcto. Identificaste correctamente el problema (nosotros tuvimos un problema similar). Y… si vas a poner eso en producción, no olvides:
- genere manualmente la tabla de secuencias para el nuevo generador de secuencias CON el valor inicial correcto/ID inicial (de lo contrario, la hibernación comenzará desde 1 y obtendrá nuevamente)
- o establezca ese valor en el Código (marque
initalValue
en@SequenceGenerator
).
-
No puedo enumerar las mejores prácticas, pero supongo que podría reducir el límite de 50. Tampoco tengo experiencia con PostgreSQL, pero en MySQL tiene una tabla simple para la secuencia. generator e hibernate hacen todo el material.
Tuve el mismo problema: por alguna razón, hibernate no eligió el número correcto de la secuencia. Intenté todos los enfoques sin suerte y finalmente llegué a esta solución:
@Entity
@Table(name = "events")
@SequenceGenerator(name = "events_id_seq", sequenceName = "events_id_seq", allocationSize = 1)
public class Event {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "events_id_seq")
private BigInteger id;
Tuve que poner @SequenceGenerator en la parte superior de la clase, no el método, también el tamaño de asignación se estableció en 1 (si deja este valor como predeterminado, comenzará a producir identificaciones negativas).
spring-data-jpa 2.1.2
, hibernate 5.3.7
, pg 42.2.5
Agradecemos que quieras auxiliar nuestro estudio escribiendo un comentario y dejando una valoración te estamos agradecidos.