jpa.JpaSystemException: identifier of an instance of xxx to null
百度了N久一直以为是jpa的坑,看了很多文章也模糊不清,自己解决了记录一下
原因是因为把id设置为空还用了原对象去做保存操作!
错误代码
for (ErsFieldEntity fieldEntity : fieldEntities) {
fieldEntity .setId(null);
fieldEntity .setTemplateId(ersTemplateEntity.getId());
fieldEntity .setGroupId(UserUtils.getGroupId());
List<ErsFieldLanguageEntity> languageEntities = fieldNameMap.get(fieldId);
if(languageEntities==null||languageEntities.isEmpty()){
continue;
}
ersFieldDao.save(fieldEntity );
ArrayList<ErsFieldLanguageEntity> languageResult = new ArrayList<>();
for (ErsFieldLanguageEntity languageEntity : languageEntities) {
languageEntity .setId(null);
languageEntity1.setFieldId(fieldEntity1.getId());
languageResult.add(languageEntity1);
}
languageResults.addAll(languageResult);
}
正确代码:新建一个对象进行数据添加
for (ErsFieldEntity fieldEntity : fieldEntities) {
ErsFieldEntity fieldEntity1 = new ErsFieldEntity();
String fieldId = fieldEntity.getId();
BeanUtils.copyProperties(fieldEntity,fieldEntity1);
fieldEntity1.setId(null);
fieldEntity1.setTemplateId(ersTemplateEntity.getId());
fieldEntity1.setGroupId(UserUtils.getGroupId());
List<ErsFieldLanguageEntity> languageEntities = fieldNameMap.get(fieldId);
if(languageEntities==null||languageEntities.isEmpty()){
continue;
}
ersFieldDao.save(fieldEntity1);
ArrayList<ErsFieldLanguageEntity> languageResult = new ArrayList<>();
for (ErsFieldLanguageEntity languageEntity : languageEntities) {
ErsFieldLanguageEntity languageEntity1 = new ErsFieldLanguageEntity();
BeanUtils.copyProperties(languageEntity,languageEntity1);
languageEntity1.setId(null);
languageEntity1.setFieldId(fieldEntity1.getId());
languageResult.add(languageEntity1);
}
languageResults.addAll(languageResult);
}