问题描述
所以我有两个表:projectStatus 和 projectStatusHistory。
创建新项目时,会在 projectStatus 表中插入一条新记录。一旦项目启动或状态改变,就会在projectStatusHistory表中插入一条记录(记录内容来自projectStatus表),然后在projectStatus表中更新项目状态。当一个项目完成后,我们会将最后一条记录归档到历史表中,projectStatus 表将不再有该项目的记录。
但是 projectStatusRepository.delete(projectStatusId)
抛出异常
引起:org.h2.jdbc.JdbcsqlIntegrityConstraintViolationException:违反参照完整性约束:“FKIB57NUSJBIJ4K8G83MFNY6V06 ...
@Entity
@Table(name = "projectStatus",schema = "test")
public class ProjectStatus {
@EmbeddedId
private ProjectStatusId id;
@Column(name = "projectName",nullable = false)
private String projectName;
@Column(name = "createDate",nullable = false)
@Temporal(TemporalType.DATE)
private Date createDate;
@Column(name = "status",nullable = false)
private String status;
@Column(name = "statusUpdateDate",nullable = false)
private Date statusUpdateDate;
@OnetoMany(cascade = {CascadeType.MERGE,CascadeType.PERSIST},fetch = FetchType.EAGER,mappedBy = "projectStatus")
private List<projectStatusHistory> history;
}
@Embeddable
public class ProjectStatusId implements Serializable {
@Column(name = "projectName",nullable = false)
@Temporal(TemporalType.DATE)
private Date createDate;
}
@Entity
@Table(name = "projectStatusHistory",schema = "test")
public class ProjectStatusHistory {
@EmbeddedId
private ProjectStatusHistoryId id;
@Column(name = "projectName",nullable = false)
private String status;
@Column(name = "statusUpdateTimeStamp",nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date statusUpdateTimeStamp;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({@JoinColumn(name = "projectName",insertable = false,updatable = false),@JoinColumn(name = "createDate",updatable = false)})
private ProjectStatus projectStatus;
}
@Embeddable
public class ProjectStatusHistoryId implements Serializable {
@Column(name = "projectName",nullable = false)
@Temporal(TemporalType.DATE)
private Date createDate;
@Column(name = "statusUpdateTimeStamp",nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date statusUpdateTimeStamp;
}
public interface ProjectStatusRepository extends JpaRepository<ProjectStatus,ProjectStatusId> {
}
public interface ProjectStatusHistoryRepository extends JpaRepository<ProjectStatusHistory,ProjectStatusHistoryId> {
}
public void projectStatusChanged(ProjectStatusId projectStatusId){
ProjectStatus projectStatus = projectStatusRepository.findById(projectStatusId);
//move current status to history table and then update status
projectStatusHistory = createANewProjectStatusHistoryFromProjectStatus(projectStatus);
projectStatus.status = newStatus;
projectStatus.History = projectStatusHistory;
projectStatusRepository.save(projectStatus);
}
public void projectComplete(ProjectStatusId projectStatusId){
ProjectStatus projectStatus = projectStatusRepository.findById(projectStatusId);
//move current status to history table and then update status
projectStatusHistory = createANewProjectStatusHistoryFromProjectStatus(projectStatus);
projectStatusHistoryRepository.save(projectStatusHistory);
projectStatusRepository.delete(projectStatusId);
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)