spring+jpa+hibernate中EntityManager注入失败原因分析
部分controller代码:
if(StringUtil.isNotBlank(terminalNumFlag) && !terminalNumFlag.equals(terminalNum)){ boolean isLegal = DeviceSerialUtil.checkSerial(terminalNum, "T"); if(!isLegal){ modelMap.put("message", "设备不合法"); return new ModelAndView("jacksonJsonView", modelMap); } String deviceFlowCode = terminalNum.substring(13, 28); terminalNum = DeviceSerialUtil.getDeviceRealSerial(deviceFlowCode); } SysTerminalDao sysTerminalDao = new SysTerminalDao(); long result = sysTerminalDao.checkDistributionChannel(terminalNum); if (result == 0) { /* 非公司货源. */ modelMap.put("message", "非公司货源"); return new ModelAndView("jacksonJsonView", modelMap); }
部分dao代码:
/** 注入EntityManager */ @PersistenceContext protected EntityManager entityManager; public Long getCountByNative(String sqlCount) { Query query = entityManager.createNativeQuery(sqlCount); return Long.parseLong(query.getSingleResult().toString()); }
通过调试发现,entityManager获取的始终未null值,最终定位到是控制层标红语句的原因
解决方案:
将获取dao对象修改为spring注入
修改后controller中代码为:
@Resource private SysTerminalDao sysTerminalDao; if(StringUtil.isNotBlank(terminalNumFlag) && !terminalNumFlag.equals(terminalNum)){ boolean isLegal = DeviceSerialUtil.checkSerial(terminalNum, "T"); if(!isLegal){ modelMap.put("message", "设备不合法"); return new ModelAndView("jacksonJsonView", modelMap); } String deviceFlowCode = terminalNum.substring(13, 28); terminalNum = DeviceSerialUtil.getDeviceRealSerial(deviceFlowCode); } long result = sysTerminalDao.checkDistributionChannel(terminalNum); if (result == 0) { /* 非公司货源. */ modelMap.put("message", "非公司货源"); return new ModelAndView("jacksonJsonView", modelMap); }

浙公网安备 33010602011771号