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

526
Visualizações
Hibernate con PostgreSQL usando el valor predeterminado en Entity

Estoy desarrollando una API usando Springboot y PostgreSQL 12. Creé una tabla de usuario con hibernate y el campo de entidad que es problemático es el siguiente:

 @Column(columnDefinition = "BOOLEAN NOT NULL DEFAULT FALSE") private Boolean emailVerificationStatus = false;

Mi tabla parece estar correctamente generada:

 create table users ( id int8 generated by default as identity, email varchar(120) not null, email_verification_status boolean default false not null, email_verification_token varchar(255), encrypted_password varchar(255) not null, first_name varchar(50) not null, last_name varchar(50) not null, user_id varchar(255) not null, primary key (id) )

Mi problema es que al ejecutar la aplicación recibo un mensaje de error:

 org.hibernate.PropertyValueException: not-null property references a null or transient value : fr.mycompany.app.io.entity.UserEntity.emailVerificationStatus

Por defecto, cuando creo el usuario, envía un valor nulo. Puedo resolver este problema configurando el valor en falso en mi capa de servicio, pero no es muy elegante. Además, cuando elimino la opción anulable = falso, funciona bien, pero el valor se establece en nulo en lugar de obtener el valor predeterminado. Parece que postgresql no toma el valor predeterminado (falso) como valor cuando intento enviar un usuario a mi API. Quiero forzar el cambio de valor nulo a falso de forma predeterminada.

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

De acuerdo con la documentación de hibernación, puede intentar utilizar el siguiente enfoque:

 @Entity @DynamicInsert public class YourEntity { @ColumnDefault("false") private Boolean emailVerificationStatus; // ... }

Tenga en cuenta que la entidad anterior está anotada con la anotación @DynamicInsert para que la INSERT no incluya ningún atributo de entidad que no contenga un valor. Entonces, esto le permite evitar el caso descrito en la respuesta de @MikeOrganek.

over 4 years ago · Santiago Trujillo Relatório

0

Debe resolver esto en su capa de servicio.

PostgreSQL sigue el estándar SQL. El valor de default clause solo tiene efecto si la columna se omite de la lista de columnas o si se especifica el valor default en la lista de valores. Cuando Hibernate ejecuta la insert , emailVerificationStatus se incluye explícitamente como null .

Consulte: http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt

La sección "<sentencia de inserción>", "Reglas generales", 4b, en la página 389 define el comportamiento de inserción.

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