Saltar al contenido

Cómo generar un UUID automático usando Hibernate en Spring Boot

Este equipo redactor ha pasado mucho tiempo buscando para darle resolución a tus preguntas, te regalamos la soluciones así que nuestro objetivo es resultarte de mucha ayuda.

Solución:

¿Puedes intentar?

    @Id
    @GeneratedValue(generator = "uuid2")
    @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
    @Column(name = "id", columnDefinition = "VARCHAR(255)")
    private UUID id;

podría usar algunos eventos como @PrePersist para completar el campo UUID https://docs.jboss.org/hibernate/orm/4.0/hem/en-US/html/listeners.html

pero ¿por qué simplemente no asignar uuid cuando se crea el objeto uuid = UUID.randomUUID() ?

Ha habido muchos cambios en el marco y, como se probó en Spring Boot 2.2.5 con MySQL v5.7 (debería funcionar con todas las versiones 2.0 pero es necesario verificarlo), el UUID se puede generar automáticamente como se muestra a continuación.

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id", insertable = false, updatable = false, nullable = false)
private UUID id;

Esto lo almacenará en formato binario de manera compacta (bueno para el almacenamiento). Si por alguna razón uno necesita almacenar UUID en el campo Varchar como legible por humanos (valores separados por guiones), se puede hacer de la siguiente manera

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Type(type="uuid-char")
@Column(name="id", columnDefinition = "VARCHAR(255)", insertable = false, updatable = false, nullable = false)
private String id;

De forma predeterminada, Hibernate asigna UUID con formato binario, por lo tanto, para cambiar el formato, debemos proporcionar una pista utilizando la anotación Tipo.

Eres capaz de añadir valor a nuestra información aportando tu veteranía en las explicaciones.

¡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 *