在保存与外键关系的数据时,它抛出异常在有外键关系保存数据时,它抛出异常
灵敏度实体类
@Entity
@Table(name="lab_tb_sensitivity")
public class Sensitivity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name=EntityConstants.SQ_NAME, sequenceName=EntityConstants.SQ_SS)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator=EntityConstants.SQ__NAME)
@Column(name="sensitivity_id")
private long sensitivityId;
@Column(name="audit_yn")
private String auditYn;
//bi-directional many-to-one association to SensitivityPattern
@OneToMany(cascade = {CascadeType.PERSIST,CascadeType.MERGE},fetch = FetchType.LAZY, mappedBy="sensitivity")
private Set<SensitivityPattern> SensitivityPattern;
/** Constructor and getters and setters
}
有一个一对多的关系附带SensitivityPattern
SensitivityPattern实体类
@Entity
@Table(name="lab_tb_sensitivity_pattern")
public class SensitivityPattern implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
private SensitivityPatternPK id;
private String remarks;
@ManyToOne
@JoinColumn(name="sensitivity_id", nullable = false, insertable = false, updatable = false)
private Sensitivity sensitivity;
/**Constructor and geets setters */
}
主键是复合键(sensitivityId + ABID) SensitivityPatternPK实体类 ---------------------------------
@Embeddable
public class SensitivityPatternPK implements Serializable {
//default serial version id, required for serializable classes.
private static final long serialVersionUID = 1L;
@Column(name="sensitivity_id")
private long sensitivityId;
@Column(name="ab_id")
private long abId;
/**Constructor and geets setters */
}
在保存代码
@Override
public boolean saveSensitivityData(List<SensitivityDto> sensitivity) {
if(sensitivity != null){
for(SensitivityDto dto : sensitivity) {
try {
updateSensitivityPattern(dto);
super.saveOneEntity(dto);
} catch (GenericException e) {
e.printStackTrace();
}
}
}
return false;
}
/**
* To update the sensitivity data.
* @param dto
*/
private void updateSensitivityPattern(SensitivityDto dto) {
if(dto != null && dto.getSensitivityPattern() != null){
for(SensitivityPatternDto sPattern : dto.getSensitivityPattern() ){
SensitivityPatternPKDto sensitivityPatternPKDto = new SensitivityPatternPKDto();
sensitivityPatternPKDto.setSensitivityId(dto.getSensitivityId());
sPattern.setId(sensitivityPatternPKDto);
sPattern.setSensitivity(dto);
}
}
这是DAO类将数据保存到数据库中
@Transactional(rollbackOn = GenericException.class)
public D saveOneEntity(D dto) throws GenericException {
T result;
try {
result = repository.save(mapper.map(dto, entityClass));
} catch (DataAccessException dae) {
throw new GenericException(dae, dae.getRootCause().getMessage());
} catch (Exception e) {
throw new GenericException(
e,
messageSource.getMessage(CodeEnum.UNKNOWN_EXCEPTION_ON_SAVE_METHOD.getValue(), null, Locale.ENGLISH));
}
return mapper.map(result, dtoClass);
}
在与下面的数据保存在击中下面的数据服务
{
"sensitivity": [
{
"auditYn": "Y",
"sensitivityPattern": [
{
"id": {
"abId": 11
},
"remarks": "test"
}
]
}
]
}
它抛出异常
"Caused by: org.postgresql.util.PSQLException: ERROR: insert or update on table "lab_tb_sensitivity_pattern" violates foreign key constraint "fk_sensitivity_id" Detail: Key (sensitivity_id)=(0) is not present in table "lab_tb_sensitivity".
SensitivityDto persistedDTO = super.saveOneEntity(DTO); //这条线现在抛出异常 – user630209
@ user630209什么是异常? – ScanQR
造成的:org.postgresql.util.PSQLException:ERROR:插入或表 “lab_tb_sensitivity_pattern” 更新违反外键约束 “fk_sensitivity_id” 详细信息:按键(sensitivity_id)=(0)不存在表 “lab_tb_sensitivity”。 – user630209