ORA-02291:违反完整性约束(GOPI.SYS_C007099)-在Hibernate中未找到父项
我用MySQL在hibernate中实现了一个项目,效果很好。但是我的客户希望在Oracle11g中使用它,但是下面的代码抛出了这个错误 原因:java.sql.SQLIntegrityConstraintViolationException:ORA-02291:违反完整性约束(GOPI.SYS_C007099)-未找到父项 以下是我与@oneToMany@ManyToOne关系的代码 我有3个实体ORA-02291:违反完整性约束(GOPI.SYS_C007099)-在Hibernate中未找到父项,hibernate,jpa,oracle11g,transactions,entitymanager,Hibernate,Jpa,Oracle11g,Transactions,Entitymanager,我用MySQL在hibernate中实现了一个项目,效果很好。但是我的客户希望在Oracle11g中使用它,但是下面的代码抛出了这个错误 原因:java.sql.SQLIntegrityConstraintViolationException:ORA-02291:违反完整性约束(GOPI.SYS_C007099)-未找到父项 以下是我与@oneToMany@ManyToOne关系的代码 我有3个实体 过程 过程分析 工艺步骤 我就是这样坚持下去的 Process_Steps proSteps
我就是这样坚持下去的
Process_Steps proSteps=new Process_Steps ();
List<Process_analysis> pro_Anlist =new ArrayList<Process_analysis>();
java.util.Date date=new java.util.Date();
this.bean.setCancelled_Flg('F');
this.bean.setUser_Id("xyz");
this.bean.setpro_Status("xyz");
this.bean.setPro_Description("dsfdfdfsdf");
this.bean.setLast_Updated_Date(new Timestamp(date.getTime()));
proService.merge(this.bean); //Persisting or merging Process Entity
for(int i=0;i<3;i++){
Process_analysis proAn=new Process_analysis();
proAn.setCase_Protocal_Id("CASE:"+i);
proAn.setPro(this.bean);
proAnService.persist(proAn); //Persisting Each process analysis for Process NOTE:Throws Error Here
pro_Anlist.add(proAn);
}
proSteps.setRemarks("The StackOverflow");
proSteps.setStart_Time(new Timestamp(date.getTime()));
proSteps.setEnd_Time(new Timestamp(date.getTime()));
proSteps.setPro(this.bean); //Setting Foreign key of Process
proStepsService.persist(proSteps);
this.bean.getProAna().addAll(pro_Anlist);
this.bean.getProSteps().add(proSteps);
proService.merge(this.bean);`
前脚
这在MySQL中起作用的原因是您可能没有在那里定义正确的外键。@a_horse_与_no_name:P那么我们如何持久化实体的外键呢?有什么想法吗??顺便说一句,我能够持久化流程并手动插入流程分析记录……这怎么可能呢???请发布相关映射。@DraganBozanovic我添加了映射请看一看为什么要将
@ElementCollection
与@OneToMany
结合起来?
Process_Steps proSteps=new Process_Steps ();
List<Process_analysis> pro_Anlist =new ArrayList<Process_analysis>();
java.util.Date date=new java.util.Date();
this.bean.setCancelled_Flg('F');
this.bean.setUser_Id("xyz");
this.bean.setpro_Status("xyz");
this.bean.setPro_Description("dsfdfdfsdf");
this.bean.setLast_Updated_Date(new Timestamp(date.getTime()));
proService.merge(this.bean); //Persisting or merging Process Entity
for(int i=0;i<3;i++){
Process_analysis proAn=new Process_analysis();
proAn.setCase_Protocal_Id("CASE:"+i);
proAn.setPro(this.bean);
proAnService.persist(proAn); //Persisting Each process analysis for Process NOTE:Throws Error Here
pro_Anlist.add(proAn);
}
proSteps.setRemarks("The StackOverflow");
proSteps.setStart_Time(new Timestamp(date.getTime()));
proSteps.setEnd_Time(new Timestamp(date.getTime()));
proSteps.setPro(this.bean); //Setting Foreign key of Process
proStepsService.persist(proSteps);
this.bean.getProAna().addAll(pro_Anlist);
this.bean.getProSteps().add(proSteps);
proService.merge(this.bean);`
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="pro_que_seq")
@SequenceGenerator(name="pro_que_seq",sequenceName="pro_que_seq")
@Column(name="Pro_Id")
private Long Pro_Id;
public Long getPro_Id() {
return Pro_Id;
}
public void setPro_Id(Long pro_Id) {
Pro_Id = pro_Id;
}
@ElementCollection
@OneToMany(cascade=CascadeType.MERGE, fetch=FetchType.EAGER,mappedBy="Pro",targetEntity=ProInSteps.class)
private Collection<ProInSteps> ProInSteps=new LinkedHashSet<ProInSteps>();
@ElementCollection
@OneToMany(cascade=CascadeType.MERGE, fetch=FetchType.EAGER,mappedBy="Pro",targetEntity=ProAnalysis.class)
private Collection<ProAnalysis> ProAnalysis=new LinkedHashSet<ProAnalysis>();
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="pro_an_seq")
@SequenceGenerator(name="pro_an_seq",sequenceName="ana_pro_seq")
private Long Analysis_Id;
@ManyToOne(fetch=FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name="Pro_Id")
private Process Pro;
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="in_step_seq")
@SequenceGenerator(name="in_step_seq",sequenceName="pro_instep_seq")
private Long Pro_Step_Id;
private Timestamp Start_Time;
private Timestamp End_Time;
@ManyToOne(fetch=FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name="Pro_Id")
private Process Pro;