• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

427
Views
Hibernate with PostgreSQL using default value in Entity

I'm developping an API using Springboot and PostgreSQL 12. I created a user table with hibernate and the entity field that is problematic is the following:

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

My table seems to be correctly generated :

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

My issue is while running the application I receive an error message :

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

By default, when I create the user, it sends a null value. I can solve this issue by setting the value to false in my service layer but it's not very elegant. Also, When I remove the option nullable = false, it works fine but the value is set to null instead of getting the default value. It seems that postgresql doesn't take the default value (false) as value when I try to send a user to my API. I want to force changing null value to false by default.

about 3 years ago · Santiago Trujillo
2 answers
Answer question

0

According to the hibernate documentation you can try to use the following approach:

@Entity
@DynamicInsert
public class YourEntity {

  @ColumnDefault("false")
  private Boolean emailVerificationStatus;

  // ...
}

Please note that the entity above is annotated with the @DynamicInsert annotation so that the INSERT statement does not include any entity attribute that does not contain a value. So, this is allow you to avoid case described in the @MikeOrganek's answer.

about 3 years ago · Santiago Trujillo Report

0

You need to solve this in your service layer.

PostgreSQL is following the SQL standard. The default clause value is in effect only if the column is omitted from the column list or if default is specified in the value list. When Hibernate runs the insert, the emailVerificationStatus is explicitly included as null.

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

The section "<insert statement>," "General Rules," 4b, on page 389 defines insert behavior.

about 3 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 Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error