查询数据时发现报了object references an unsaved transient instance
最近写代码时,发现一个离奇的错误,查询数据时,报了查询数据时发现报了object references an unsaved transient instance。在网上查询了下这个错误,大部分人都是在保存的时候报这个错误的。这就更奇怪了。
出错代码如下
public Map<String, Object> parseCourse(long id, String course) {
Map<String, Object> map = new HashMap<>();
Course curcourse = gson.fromJson(course, Course.class);
。。。。。。。
if (courseObj.containsKey("discipline") && courseObj.get("discipline") != null) {
Map<String, Object> disciplineObj = (Map<String, Object>) JSONObject
.toBean(JSONObject.fromObject(courseObj.get("discipline")), Map.class);
if (disciplineObj.containsKey("minorCode") && disciplineObj.get("minorCode") != null) {
Discipline discipline = metadataSerive.getDiscipline(disciplineObj.get("minorCode").toString());
map.put("minorCode", disciplineObj.get("minorCode").toString());
if(discipline.getMajorEn()==null)
majorEn="0000";
else
majorEn = discipline.getMajorEn();
curcourse.setDiscipline(discipline);
courseObj.remove("discipline");
} else {
throw new BusinessException(String.format("未选择学科"), ErrorCode.E00001);
}
}
。。。。。。。。
return map;
}
public Discipline getDiscipline(String minorCode) {
return disciplineRepo.findByMinorCode(minorCode);
}
当处理Discipline时,调用findByMinorCode方法会报该错,修改成findById()不报错。
最终我发现在调用parseCourse方法上加了事务,把事务删去之后,就不报该错了。
不清楚什么原因,先mark下,后期去官网看看。