Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

457
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!