使用多对一关系,我得到了org.h2.jdbc.JdbcSQLException:唯一索引或主键冲突

时间:2016-08-22 01:43:55

标签: hibernate primary-key h2 many-to-one unique-index

我有两个表:学习和诊断,每个研究都有一个独特的诊断,并且诊断'名称是唯一的,我的代码是:

@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);

0 个答案:

没有答案
相关问题