我有两个表:学习和诊断,每个研究都有一个独特的诊断,并且诊断'名称是唯一的,我的代码是:
@Data
@Entity
@Table(name = "diagnosis")
public class Diagnosis {
@Id
@GeneratedValue(strategy =GenerationType.AUTO)
private Integer id;
@Column(unique = true)
private String name;
@Column
private String stage;
@Column
private String description;
}
研究是:
@Data
@Entity
@Table(name = "study")
public class Study {
@Id
@Column
private Double uid;
@Column
private String manufacture;
@Column
private Date study_datatime;
@ManyToOne(cascade = {CascadeType.PERSIST})
@JoinColumn(name = "diagnosis_id")
private Diagnosis diagnosis;
}
但我得到了异常:org.h2.jdbc.JdbcSQLException:唯一索引或主键违规:" CONSTRAINT_INDEX_E ON PUBLIC.DIAGNOSIS(NAME)VALUES('正常',1)& #34; 我使用H2数据库1.4.190,我不知道原因。
示例测试:
public static void main(String[] args) throws Exception{
Diagnosis diagnosis=new Diagnosis();
diagnosis.setName("normal");
Study study=new Study();
Study study1=new Study();
study.setDiagnosis(diagnosis);
study.setUid(1.0);
study1.setDiagnosis(diagnosis);
study1.setUid(2.0);
SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();
Session session=sessionFactory.openSession();
Transaction transaction=session.beginTransaction();
session.persist(study);
session.persist(study1);
transaction.commit();
session.clear();
session.close();
}
实际代码:
....
diagnosisName = row.getCell(6).getStringCellValue();
if (diagnosisNameMap.keySet().contains(diagnosisName) == false)
{
diagnosis.setName(diagnosisName);
diagnosisNameMap.put(diagnosisName,diagnosis);
study.setDiagnosis(diagnosis);
session.persist(diagnosis);
}else{
diagnosis=diagnosisNameMap.get(diagnosisName);
study.setUid(Double.parseDouble(row.getCell(0).toString()));
study.setDiagnosis(diagnosis);
}
session.persist(study);