Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

270
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda