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=? @org.hibernate.annotations.Generated(value = GenerationTime.INSERT) @Column(name = "token", insertable = false, updatable = false, nullable = false) private UUID token;select solo para esa columna después de insert