Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

470
Vistas
Hibernate no puede insertar UUID en la columna VARCHAR

Estoy trabajando en la configuración de una base de datos MySQL y usando Hibernate y Play Framework para el backend. Tengo problemas con los ID de las entradas. Definí mi columna de identificación como VARCHAR(36) :

 CREATE TABLE `logaritmical`.`users` ( `id` VARCHAR(36) NOT NULL, `username` TEXT NOT NULL, `email` TEXT NOT NULL, PRIMARY KEY (`id`), UNIQUE INDEX `id_UNIQUE` (`id` ASC) );

Ahora, la clase @Entity es así:

 @Entity @Table(name = "users") public class UserDO { @Id @GeneratedValue(generator = "uuid2") @GenericGenerator(name = "uuid2", strategy = "uuid2") @Column(name = "id", updatable = false, nullable = false, columnDefinition = "VARCHAR(36)") private UUID id; @Column private String username; @Column private String email; }

Al realizar la inserción, aparece el siguiente error: Incorrect string value: '\xEF\xA5!\x89\xF3K...' for column 'id' at row 1

Si cambio el tipo de columna y la definición de columna a BINARIO BINARY(16) , la inserción funciona, pero tiene la desventaja de que la identificación no es legible por humanos cuando se realizan selecciones.

Información adicional: persistence.xml se ve así:

 <persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <non-jta-data-source>DefaultDS</non-jta-data-source> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/> </properties> </persistence-unit>

La configuración de la base de datos y las versiones de las bibliotecas tienen este aspecto: jpa.default=defaultPersistenceUnit "org.hibernate" % "hibernate-entitymanager" % "5.4.24.Final", "mysql" % "mysql-connector-java" % "8.0.22",

¿Qué se puede hacer para que el UUID funcione con VARCHAR ? ¿Hay algo que este olvidando?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Trate de usar la siguiente definición:

 import org.hibernate.annotations.Type; @Entity @Table(name = "users") public class UserDO { @Id @GeneratedValue(generator = "uuid2") @GenericGenerator(name = "uuid2", strategy = "uuid2") @Column(name = "id", updatable = false, nullable = false, columnDefinition = "VARCHAR(36)") @Type(type = "uuid-char") private UUID id; // ... }

Parece que el UUID de su dialecto se asigna de forma predeterminada al tipo básico uuid-binary .

PD Tenga en cuenta que guardar UUID PK como una cadena puede provocar problemas de rendimiento, como se explica en este artículo :

Aparte del costo de tamaño 9x (36 frente a 4 bytes para un int), las cadenas no se clasifican tan rápido como los números porque dependen de las reglas de intercalación.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda