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

269
Vistas
La consulta JPA después de guardar no devuelve el campo generado por la base de datos

Estoy tratando de guardar este modelo en una base de datos y luego recuperar lo que acabo de guardar. Se recuperan todos los campos excepto el campo UUID generado por la base de datos.

 @Entity @Table(name = "usertoken") public class UserToken implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(name = "token", insertable = false, updatable = false, nullable = false) private UUID token; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name="usersid", nullable=false) private User user; @Column(name = "expiration", updatable = false, nullable = false) private LocalDateTime expiration;

Guardo el token desde dentro del servicio.

 token = tokenRepository.save(token);

que genera este SQL

 Hibernate: insert into usertoken (expiration, usersid) values (?, ?)

La siguiente declaración obtiene el token.

 token = tokenRepository.findByUser(user);

Veo que la selección de SQL incluye el campo de token

 Hibernate: select usertoken0_.id as id1_8_, usertoken0_.expiration as expirati2_8_, usertoken0_.token as token3_8_, usertoken0_.usersid as usersid4_8_ from usertoken usertoken0_ where usertoken0_.usersid=?

... pero el objeto devuelto tiene todos los campos poblados PERO el token. La base de datos tiene un valor en la columna de token. No sé por qué llenaría todos los campos menos uno. Esta es la tabla en cuestión:

 CREATE TABLE public.usertoken ( id integer NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ), usersid integer NOT NULL, token uuid NOT NULL DEFAULT uuid_generate_v1(), expiration timestamp without time zone NOT NULL, CONSTRAINT "usertoken_pkey" PRIMARY KEY (id) )

Olvidé agregar que cuando consulto más adelante, se encuentra el token y el campo UUID se completa correctamente. Entonces, ¿algo extraño con el almacenamiento en caché de JPA? ¿Los valores de la columna DEFAULT de la base de datos son ignorados por hibernación después de la inserción?

 tokenRepository.findByToken(UUID.fromString(userToken)); Hibernate: select usertoken0_.id as id1_8_, usertoken0_.expiration as expirati2_8_, usertoken0_.token as token3_8_, usertoken0_.usersid as usersid4_8_ from usertoken usertoken0_ where usertoken0_.token=?
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

  • Debe indicar a hibernate que la base de datos está generando el campo. Así que agrega lo siguiente:
 @org.hibernate.annotations.Generated(value = GenerationTime.INSERT) @Column(name = "token", insertable = false, updatable = false, nullable = false) private UUID token;
  • También verá que Hibernate emite una select solo para esa columna después de insert
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