Saltar al contenido

JPA 2 @SequenceGenerator @GeneratedValue produciendo una violación de restricción única

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:

  1. 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).
  2. 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *