【问题标题】:Column 'encrypted_password' cannot be null?列“encrypted_pa​​ssword”不能为空?
【发布时间】:2019-12-29 21:43:35
【问题描述】:

我正在使用 Javaspring-data-jpa 开发 Web 服务。我设置了工作正常的不同端点。现在我在 post 方法中实现了逻辑并返回一个我无法解决的错误。

我使用postman,当我尝试使用 id、用户名、姓氏和密码进行发布请求时,我收到错误 500,服务器返回此错误:

java.sql.SQLIntegrityConstraintViolationException:列“encrypted_pa​​ssword”不能为空

package com.nicolacannata.Appws.entity;

import javax.persistence.*;
import java.io.Serializable;

@Entity(name="users")
public class UserEntity implements Serializable{

    private static final long serialVersionUID = 8076405899207283205L;

    @Id
    @GeneratedValue
    private long id;

    @Column(nullable = false)
    private String userId;

    @Column(nullable = false, length = 50)
    private String firstName;

    @Column(nullable = false, length = 50)
    private String lastName;

    @Column(nullable = false, length = 50)
    private String email;

    @Column(nullable = false)
    private String encryptedPassword;

    private String emailVerificationToken;

    @Column(nullable = false)
    private boolean emailVerificationStatus = false;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEncryptedPassword() {
        return encryptedPassword;
    }

    public void setEncryptedPassword(String encryptedPassword) {
        this.encryptedPassword = encryptedPassword;
    }

    public String getEmailVerificationToker() {
        return emailVerificationToken;
    }

    public void setEmailVerificationToker(String emailVerificationToker) {
        this.emailVerificationToken = emailVerificationToker;
    }

    public boolean isEmailVerificationStatus() {
        return emailVerificationStatus;
    }

    public void setEmailVerificationStatus(boolean emailVerificationStatus) {
        this.emailVerificationStatus = emailVerificationStatus;
    }
}

【问题讨论】:

  • 抛出异常是因为您将列encryptedPassword 改为不是null (@Column(..., nullable = false))。根本原因很可能是因为您没有设置(正确)。如果没有看到您的端点、构造要创建的实体的逻辑以及您的 POST 请求,就很难进一步诊断问题。

标签: java sql spring-mvc spring-data-jpa


【解决方案1】:

您声明属性encryptedPassword 不能为空。异常意味着,当您尝试将其保存到数据库时,此属性为 null。要么您忘记设置此属性。或者你设置它(你调用了setter),但新值是null。要解决此问题,请在保存到 DB 之前将此属性设置为 not-null 值。

【讨论】:

    【解决方案2】:

    您有 @Column(nullable = false)private String encryptedPassword;,并且您只传递了 id、用户名、姓氏和密码。这打破了nullable = false 的条件并导致java.sql.SQLIntegrityConstraintViolationException: Column 'encrypted_password' cannot be null

    解决方案

    设置@Column(nullable = true)

    传递encryptedPassword的值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多