我在使用JPA + Hibernate
添加记录到联结表时遇到问题当我尝试使用POST请求添加简单记录时,它会抛出一个错误:
“message”:“无法执行语句; SQL [n / a];约束[null];嵌套异常是org.hibernate.exception.ConstraintViolationException:无法执行语句”
在我的控制台中:
MySQLIntegrityConstraintViolationException:无法添加或更新子行:外键约束失败*
我已经定义了加入列@JoinColumn(insertable=false, updatable=false)
,因为Hibernate要求它,否则它会抛出我应该这样做的错误......
这是我的联结实体代码:
@Entity
@Table(name = "hospital_doctor")
@IdClass(Hosdoc.class)
public class HospitalDoctor implements Serializable {
@Id
private int hospitalId;
@Id
private int doctorId;
// fields of hospitalDoctor table
@Temporal(TemporalType.DATE)
private Date contractStartDate;
@Temporal(TemporalType.DATE)
private Date contractEndDate;
private String position;
private String supervisor;
private boolean partTime;
@ManyToOne
@JoinColumn(name="HospitalId", insertable = false, updatable = false)
private Hospital hospital;
@ManyToOne
@JoinColumn(name="DoctorId", insertable = false, updatable = false)
private Doctor doctor;
// GETTERS AND SETTERS....
我在医院类中编写了简单的添加功能但我不知道如何使用它通过POST请求将记录添加到联结表。
public void addDoctor(Doctor doctor, boolean partTime, Date contractEndDate, Date contractStartDate,
String position, String supervisor) {
HospitalDoctor association = new HospitalDoctor();
association.setDoctor(doctor);
association.setHospital(this);
association.setDoctorId(doctor.getId());
association.setHospitalId(this.getId());
association.setContractStartDate(contractStartDate);
association.setContractEndDate(contractEndDate);
association.setPosition(position);
association.setSupervisor(supervisor);
association.setPartTime(partTime);
doctors.add(association);
}
服务:
public void addHospitalDoctor(HospitalDoctor hospitalDoctor) {
hospitalDoctorDao.save(hospitalDoctor);
}
控制器:
@PostMapping(value = "/api/hospitaldoctors")
public void addHospitalDoctor(HospitalDoctor hospitalDoctor) {
hospitalDoctorService.addHospitalDoctor(hospitalDoctor);
}