Java org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException:列“不允许为NULL”;待办事项“U ID”;
我正在尝试使用相同的Backlog\u id将我的Backlog类映射到Projecttask类,以便轻松访问。当我通过放置backlog_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
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,是的,它存在于数据库中,当我运行项目任务时,它在之前创建并存在于数据库中。