Java org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException:列“不允许为NULL”;待办事项“U ID”;

Java org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException:列“不允许为NULL”;待办事项“U ID”;,java,spring,hibernate,Java,Spring,Hibernate,我正在尝试使用相同的Backlog\u id将我的Backlog类映射到Projecttask类,以便轻松访问。当我通过放置backlog_id来执行此操作时,会出现以下错误: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException:列BACKLOG\u ID不允许为NULL 我现在所拥有的: 项目类别: @Entity public class Project { @Id @GeneratedValue(strategy

我正在尝试使用相同的Backlog\u id将我的Backlog类映射到Projecttask类,以便轻松访问。当我通过放置backlog_id来执行此操作时,会出现以下错误:
org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException:列BACKLOG\u ID不允许为NULL

我现在所拥有的:

项目类别:

@Entity
public class Project {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    @NotBlank(message="project name is required")
    private String projectName;
    @NotBlank(message="project Identifier is required")
    @Size(min=4,max=5,message="please use 4to 5 character")
    @Column(updatable=false ,unique=true)
    private String projectIdentifir;
    @NotBlank(message="project description is required")
    private String description;
    @JsonFormat(pattern="yyyy-mm-dd")
    private Date create_date;
    @JsonFormat(pattern="yyyy-mm-dd")
    @Column(updatable=false)
    private Date upate_date;
    //@Autowired

    @OneToOne(fetch=FetchType.EAGER,cascade=CascadeType.ALL,mappedBy="project")
    //@Autowired
    //Backlog backlog=new Backlog();
    @JsonIgnore
    private Backlog backlog;

    @PrePersist
    protected  void onCreate()
    {
        this.create_date=new Date();
    }
    @PreUpdate
    protected void onUpdate()
    {
        this.upate_date=new Date();
    } 

    //Getters + Setters
}
@Entity
public class Projecttask {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    @Column(updatable=false)
    private String projectSequence; 
    @NotBlank(message="please include a project summary")
    private String summary;
    private String acceptanceCriteria;
    private String status;
    private Integer priority;
    private Date dueDate;
    private Date create_At;
    private Date update_At;
    @Column(updatable=false)
    private String projectIdentifir;
    //ManyToOne with Backlog
    @ManyToOne(fetch=FetchType.EAGER,cascade=CascadeType.REFRESH)
    @JoinColumn(name="backlog_id",nullable=false,updatable=false)
    @JsonIgnore
    private Backlog backlog;

    @PrePersist
    protected void onCreate() {
        this.create_At=new Date();

    }
    @PreUpdate
    protected void onUpdate() {
        this.update_At=new Date();
    }

    //Getters + Setters     

    @Override
    public String toString() {
        return "Projecttask [id=" + id + ", projectSequence=" + projectSequence + ", summary=" + summary
                + ", acceptanceCriteria=" + acceptanceCriteria + ", status=" + status + ", priority=" + priority
                + ", dueDate=" + dueDate + ", create_At=" + create_At + ", update_At=" + update_At
                + ", projectIdentifir=" + projectIdentifir + ", backlog=" + backlog + "]";
    }
}
@Entity
public class Backlog {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    private Integer PTSequence=1;
    private String projectIdentifir;
    // with project
    @OneToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="project_id",nullable=false)
    //@Autowired
    @JsonIgnore
    private Project project;

    //OneTOMany projectTask
    @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="backlog")
    private List<Projecttask> projecttask=new ArrayList<>();

    //Getters + Setters     
}
    @Service
    public class ProjectTaskService {
        @Autowired
     private BacklogRepository backlogRepository;
        @Autowired
     private ProjecttaskRepository projecttaskRepository;

    public Projecttask addProjecttask(String projectIdentifir,Projecttask projecttask){
        //Exception:project not found
        //Pts to be added to a specific project!==null(project)
        Backlog backlog=backlogRepository.findByProjectIdentifir(projectIdentifir);
        //set the bl to pt
        projecttask.setBacklog(backlog);
        System.out.println(backlog);
        // we want our project sequence to be like this  IDPRO-1,IDPRO-2,...100101
        //System.out.println(backlog.getPTSequence());
        //Integer BacklogSequence = backlog.getPTSequence();

        //update the bl sequnce 
        //BacklogSequence++;
        //Add Sequence to Project Task

        int counter=0;
        //projecttask.setProjectSequence(projectIdetifir+"-"+(++counter));
        projecttask.setAcceptanceCriteria(projectIdentifir+"-"+counter);
        counter=counter+1;
        //backlog.setPTSequence(counter);
        projecttask.setProjectIdentifir(projectIdentifir);
        //projectTask.setProjectIdentifir(projectIdentifir);
        //intial periority when peroirity is null
        if( projecttask.getPriority()==null) {
            projecttask.setPriority(3);
    }
        //initail status when status is null
        if(projecttask.getStatus()==null) {
            projecttask.setStatus("TO_DO");
        }

          return projecttaskRepository.save(projecttask);
    }

     public Iterable<Projecttask>findBacklogById(String id){
        return projecttaskRepository.findByProjectIdentifirOrderByPriority(id);
    }
}
项目任务类:

@Entity
public class Project {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    @NotBlank(message="project name is required")
    private String projectName;
    @NotBlank(message="project Identifier is required")
    @Size(min=4,max=5,message="please use 4to 5 character")
    @Column(updatable=false ,unique=true)
    private String projectIdentifir;
    @NotBlank(message="project description is required")
    private String description;
    @JsonFormat(pattern="yyyy-mm-dd")
    private Date create_date;
    @JsonFormat(pattern="yyyy-mm-dd")
    @Column(updatable=false)
    private Date upate_date;
    //@Autowired

    @OneToOne(fetch=FetchType.EAGER,cascade=CascadeType.ALL,mappedBy="project")
    //@Autowired
    //Backlog backlog=new Backlog();
    @JsonIgnore
    private Backlog backlog;

    @PrePersist
    protected  void onCreate()
    {
        this.create_date=new Date();
    }
    @PreUpdate
    protected void onUpdate()
    {
        this.upate_date=new Date();
    } 

    //Getters + Setters
}
@Entity
public class Projecttask {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    @Column(updatable=false)
    private String projectSequence; 
    @NotBlank(message="please include a project summary")
    private String summary;
    private String acceptanceCriteria;
    private String status;
    private Integer priority;
    private Date dueDate;
    private Date create_At;
    private Date update_At;
    @Column(updatable=false)
    private String projectIdentifir;
    //ManyToOne with Backlog
    @ManyToOne(fetch=FetchType.EAGER,cascade=CascadeType.REFRESH)
    @JoinColumn(name="backlog_id",nullable=false,updatable=false)
    @JsonIgnore
    private Backlog backlog;

    @PrePersist
    protected void onCreate() {
        this.create_At=new Date();

    }
    @PreUpdate
    protected void onUpdate() {
        this.update_At=new Date();
    }

    //Getters + Setters     

    @Override
    public String toString() {
        return "Projecttask [id=" + id + ", projectSequence=" + projectSequence + ", summary=" + summary
                + ", acceptanceCriteria=" + acceptanceCriteria + ", status=" + status + ", priority=" + priority
                + ", dueDate=" + dueDate + ", create_At=" + create_At + ", update_At=" + update_At
                + ", projectIdentifir=" + projectIdentifir + ", backlog=" + backlog + "]";
    }
}
@Entity
public class Backlog {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    private Integer PTSequence=1;
    private String projectIdentifir;
    // with project
    @OneToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="project_id",nullable=false)
    //@Autowired
    @JsonIgnore
    private Project project;

    //OneTOMany projectTask
    @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="backlog")
    private List<Projecttask> projecttask=new ArrayList<>();

    //Getters + Setters     
}
    @Service
    public class ProjectTaskService {
        @Autowired
     private BacklogRepository backlogRepository;
        @Autowired
     private ProjecttaskRepository projecttaskRepository;

    public Projecttask addProjecttask(String projectIdentifir,Projecttask projecttask){
        //Exception:project not found
        //Pts to be added to a specific project!==null(project)
        Backlog backlog=backlogRepository.findByProjectIdentifir(projectIdentifir);
        //set the bl to pt
        projecttask.setBacklog(backlog);
        System.out.println(backlog);
        // we want our project sequence to be like this  IDPRO-1,IDPRO-2,...100101
        //System.out.println(backlog.getPTSequence());
        //Integer BacklogSequence = backlog.getPTSequence();

        //update the bl sequnce 
        //BacklogSequence++;
        //Add Sequence to Project Task

        int counter=0;
        //projecttask.setProjectSequence(projectIdetifir+"-"+(++counter));
        projecttask.setAcceptanceCriteria(projectIdentifir+"-"+counter);
        counter=counter+1;
        //backlog.setPTSequence(counter);
        projecttask.setProjectIdentifir(projectIdentifir);
        //projectTask.setProjectIdentifir(projectIdentifir);
        //intial periority when peroirity is null
        if( projecttask.getPriority()==null) {
            projecttask.setPriority(3);
    }
        //initail status when status is null
        if(projecttask.getStatus()==null) {
            projecttask.setStatus("TO_DO");
        }

          return projecttaskRepository.save(projecttask);
    }

     public Iterable<Projecttask>findBacklogById(String id){
        return projecttaskRepository.findByProjectIdentifirOrderByPriority(id);
    }
}
积压工作类:

@Entity
public class Project {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    @NotBlank(message="project name is required")
    private String projectName;
    @NotBlank(message="project Identifier is required")
    @Size(min=4,max=5,message="please use 4to 5 character")
    @Column(updatable=false ,unique=true)
    private String projectIdentifir;
    @NotBlank(message="project description is required")
    private String description;
    @JsonFormat(pattern="yyyy-mm-dd")
    private Date create_date;
    @JsonFormat(pattern="yyyy-mm-dd")
    @Column(updatable=false)
    private Date upate_date;
    //@Autowired

    @OneToOne(fetch=FetchType.EAGER,cascade=CascadeType.ALL,mappedBy="project")
    //@Autowired
    //Backlog backlog=new Backlog();
    @JsonIgnore
    private Backlog backlog;

    @PrePersist
    protected  void onCreate()
    {
        this.create_date=new Date();
    }
    @PreUpdate
    protected void onUpdate()
    {
        this.upate_date=new Date();
    } 

    //Getters + Setters
}
@Entity
public class Projecttask {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    @Column(updatable=false)
    private String projectSequence; 
    @NotBlank(message="please include a project summary")
    private String summary;
    private String acceptanceCriteria;
    private String status;
    private Integer priority;
    private Date dueDate;
    private Date create_At;
    private Date update_At;
    @Column(updatable=false)
    private String projectIdentifir;
    //ManyToOne with Backlog
    @ManyToOne(fetch=FetchType.EAGER,cascade=CascadeType.REFRESH)
    @JoinColumn(name="backlog_id",nullable=false,updatable=false)
    @JsonIgnore
    private Backlog backlog;

    @PrePersist
    protected void onCreate() {
        this.create_At=new Date();

    }
    @PreUpdate
    protected void onUpdate() {
        this.update_At=new Date();
    }

    //Getters + Setters     

    @Override
    public String toString() {
        return "Projecttask [id=" + id + ", projectSequence=" + projectSequence + ", summary=" + summary
                + ", acceptanceCriteria=" + acceptanceCriteria + ", status=" + status + ", priority=" + priority
                + ", dueDate=" + dueDate + ", create_At=" + create_At + ", update_At=" + update_At
                + ", projectIdentifir=" + projectIdentifir + ", backlog=" + backlog + "]";
    }
}
@Entity
public class Backlog {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    private Integer PTSequence=1;
    private String projectIdentifir;
    // with project
    @OneToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="project_id",nullable=false)
    //@Autowired
    @JsonIgnore
    private Project project;

    //OneTOMany projectTask
    @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="backlog")
    private List<Projecttask> projecttask=new ArrayList<>();

    //Getters + Setters     
}
    @Service
    public class ProjectTaskService {
        @Autowired
     private BacklogRepository backlogRepository;
        @Autowired
     private ProjecttaskRepository projecttaskRepository;

    public Projecttask addProjecttask(String projectIdentifir,Projecttask projecttask){
        //Exception:project not found
        //Pts to be added to a specific project!==null(project)
        Backlog backlog=backlogRepository.findByProjectIdentifir(projectIdentifir);
        //set the bl to pt
        projecttask.setBacklog(backlog);
        System.out.println(backlog);
        // we want our project sequence to be like this  IDPRO-1,IDPRO-2,...100101
        //System.out.println(backlog.getPTSequence());
        //Integer BacklogSequence = backlog.getPTSequence();

        //update the bl sequnce 
        //BacklogSequence++;
        //Add Sequence to Project Task

        int counter=0;
        //projecttask.setProjectSequence(projectIdetifir+"-"+(++counter));
        projecttask.setAcceptanceCriteria(projectIdentifir+"-"+counter);
        counter=counter+1;
        //backlog.setPTSequence(counter);
        projecttask.setProjectIdentifir(projectIdentifir);
        //projectTask.setProjectIdentifir(projectIdentifir);
        //intial periority when peroirity is null
        if( projecttask.getPriority()==null) {
            projecttask.setPriority(3);
    }
        //initail status when status is null
        if(projecttask.getStatus()==null) {
            projecttask.setStatus("TO_DO");
        }

          return projecttaskRepository.save(projecttask);
    }

     public Iterable<Projecttask>findBacklogById(String id){
        return projecttaskRepository.findByProjectIdentifirOrderByPriority(id);
    }
}
@实体
公共类积压{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
私有整数PTSequence=1;
私有字符串;
//带项目
@OneToOne(fetch=FetchType.EAGER)
@JoinColumn(name=“project\u id”,nullable=false)
//@自动连线
@杰索尼奥雷
私人项目;
//一人一事
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy=“backlog”)
private List projecttask=new ArrayList();
//接受者+接受者
}
项目任务服务类:

@Entity
public class Project {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    @NotBlank(message="project name is required")
    private String projectName;
    @NotBlank(message="project Identifier is required")
    @Size(min=4,max=5,message="please use 4to 5 character")
    @Column(updatable=false ,unique=true)
    private String projectIdentifir;
    @NotBlank(message="project description is required")
    private String description;
    @JsonFormat(pattern="yyyy-mm-dd")
    private Date create_date;
    @JsonFormat(pattern="yyyy-mm-dd")
    @Column(updatable=false)
    private Date upate_date;
    //@Autowired

    @OneToOne(fetch=FetchType.EAGER,cascade=CascadeType.ALL,mappedBy="project")
    //@Autowired
    //Backlog backlog=new Backlog();
    @JsonIgnore
    private Backlog backlog;

    @PrePersist
    protected  void onCreate()
    {
        this.create_date=new Date();
    }
    @PreUpdate
    protected void onUpdate()
    {
        this.upate_date=new Date();
    } 

    //Getters + Setters
}
@Entity
public class Projecttask {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    @Column(updatable=false)
    private String projectSequence; 
    @NotBlank(message="please include a project summary")
    private String summary;
    private String acceptanceCriteria;
    private String status;
    private Integer priority;
    private Date dueDate;
    private Date create_At;
    private Date update_At;
    @Column(updatable=false)
    private String projectIdentifir;
    //ManyToOne with Backlog
    @ManyToOne(fetch=FetchType.EAGER,cascade=CascadeType.REFRESH)
    @JoinColumn(name="backlog_id",nullable=false,updatable=false)
    @JsonIgnore
    private Backlog backlog;

    @PrePersist
    protected void onCreate() {
        this.create_At=new Date();

    }
    @PreUpdate
    protected void onUpdate() {
        this.update_At=new Date();
    }

    //Getters + Setters     

    @Override
    public String toString() {
        return "Projecttask [id=" + id + ", projectSequence=" + projectSequence + ", summary=" + summary
                + ", acceptanceCriteria=" + acceptanceCriteria + ", status=" + status + ", priority=" + priority
                + ", dueDate=" + dueDate + ", create_At=" + create_At + ", update_At=" + update_At
                + ", projectIdentifir=" + projectIdentifir + ", backlog=" + backlog + "]";
    }
}
@Entity
public class Backlog {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    private Integer PTSequence=1;
    private String projectIdentifir;
    // with project
    @OneToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="project_id",nullable=false)
    //@Autowired
    @JsonIgnore
    private Project project;

    //OneTOMany projectTask
    @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="backlog")
    private List<Projecttask> projecttask=new ArrayList<>();

    //Getters + Setters     
}
    @Service
    public class ProjectTaskService {
        @Autowired
     private BacklogRepository backlogRepository;
        @Autowired
     private ProjecttaskRepository projecttaskRepository;

    public Projecttask addProjecttask(String projectIdentifir,Projecttask projecttask){
        //Exception:project not found
        //Pts to be added to a specific project!==null(project)
        Backlog backlog=backlogRepository.findByProjectIdentifir(projectIdentifir);
        //set the bl to pt
        projecttask.setBacklog(backlog);
        System.out.println(backlog);
        // we want our project sequence to be like this  IDPRO-1,IDPRO-2,...100101
        //System.out.println(backlog.getPTSequence());
        //Integer BacklogSequence = backlog.getPTSequence();

        //update the bl sequnce 
        //BacklogSequence++;
        //Add Sequence to Project Task

        int counter=0;
        //projecttask.setProjectSequence(projectIdetifir+"-"+(++counter));
        projecttask.setAcceptanceCriteria(projectIdentifir+"-"+counter);
        counter=counter+1;
        //backlog.setPTSequence(counter);
        projecttask.setProjectIdentifir(projectIdentifir);
        //projectTask.setProjectIdentifir(projectIdentifir);
        //intial periority when peroirity is null
        if( projecttask.getPriority()==null) {
            projecttask.setPriority(3);
    }
        //initail status when status is null
        if(projecttask.getStatus()==null) {
            projecttask.setStatus("TO_DO");
        }

          return projecttaskRepository.save(projecttask);
    }

     public Iterable<Projecttask>findBacklogById(String id){
        return projecttaskRepository.findByProjectIdentifirOrderByPriority(id);
    }
}
@服务
公共类项目任务服务{
@自动连线
私有BacklogRepository BacklogRepository;
@自动连线
私有项目任务库项目任务库;
公共项目任务addProjecttask(字符串projectIdentifir,Projecttask Projecttask){
//异常:找不到项目
//要添加到特定项目的Pts!==null(项目)
Backlog Backlog=backlogRepository.findByProjectIdentifir(projectIdentifir);
//将bl设置为pt
projecttask.setBacklog(backlog);
系统输出打印项次(待办事项);
//我们希望我们的项目顺序像IDPRO-1,IDPRO-2,…100101
//System.out.println(backlog.getPTSequence());
//整数BacklogSequence=backlog.getPTSequence();
//更新bl sequnce
//BacklogSequence++;
//向项目任务添加序列
int计数器=0;
//setProjectSequence(projectDetifir+“-”+(+++计数器));
projecttask.setAcceptanceCriteria(projectIdentifir+“-”+计数器);
计数器=计数器+1;
//backlog.setPTSequence(计数器);
projecttask.setProjectIdentifir(projectIdentifir);
//projectTask.setProjectIdentifir(projectIdentifir);
//初始边界为空时的初始边界
if(projecttask.getPriority()==null){
projecttask.setPriority(3);
}
//状态为空时的初始状态
if(projecttask.getStatus()==null){
projecttask.setStatus(“TO_DO”);
}
返回projecttaskRepository.save(projecttask);
}
公共IterablefindBacklogById(字符串id){
返回projecttaskRepository.findByProjectIdentifirOrderByPriority(id);
}
}

显然,JPA映射似乎没有问题。让我们看看:1)您是否检查了
Backlog Backlog=backlogRepository.findByProjectIdentifir(projectIdentifir)是否不为空?2) 尝试将@Transactional添加到方法SignatureEyes for Backlog Backlog=backlogRepository.findByProjectIdentifir(projectIdentifir);如果为空,则无法获取积压工作。我还将@Transactional置于方法签名,但它不起作用。先生,请帮助我,我从过去10天以来一直被困在这里。@codependent,请帮助我,先生,在这个问题上,这对MEA非常重要。正如您所说,实际问题是,您与项目任务关联的积压工作实体为空。你应该在之前坚持它。你以前做过吗?您检查过它是否确实存在于数据库中吗?@codependent,是的,它存在于数据库中,当我运行项目任务时,它在之前创建并存在于数据库中。