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

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

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 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!