Я пытаюсь сопоставить свой класс Backlog с классом Projecttask , используя тот же backlog_id, чтобы к нему было легко получить доступ. Когда я делаю это, помещая backlog_id, я получаю эту ошибку: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: NULL not allowed for column BACKLOG_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
}
Класс ProjectTaskService:
@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);
}
}