记一次使用hibernate踩的坑
-
hibernate写入SQL时参数若带有冒号,比如我这里使用到了时间13:00:00就会被识别为占位符,因此报错(named parameter not bound::00:00),使用@query将参数替换为占位符不会出现该问题,另外最简单的解决方案就是参数旁加' '。
-
若传入的参数为string类型必须加' ',否则遇到0开头就报错(unexpect 0)比如2020-09-01
-
@query注解不能使表名做为变量,因为执行时会自动加上单引号导致无法识别。解决方案使用entityManger,使用该方案时我就遇到了上面两个问题,值得注意下。
/*这是正确的写法*/
String sql = "SELECT record_dt,mkt_demand_f,mkt_demand_b,mkt_demand_e" +
" from " + mktTable+ " WHERE" +
" dpt_dt='"+dptDt+"' and dpt_tm="+"'"+dptTm+"'"+" and dpt_cty_name='"+dptCty+"' and arrv_cty_name='"+arrvCty+"' and mkt_demand_e != 0 order by record_dt";
List<Object> res = entityManager.createNativeQuery(sql).getResultList();
/*这是错误的的写法*/
String sql = "SELECT record_dt,mkt_demand_f,mkt_demand_b,mkt_demand_e" +
" from " + mktTable+ " WHERE" +
" dpt_dt="+dptDt+" and dpt_tm="+dptTm+" and dpt_cty_name="+dptCty+" and arrv_cty_name="+arrvCty+" and mkt_demand_e != 0 order by record_dt";
List<Object> res = entityManager.createNativeQuery(sql).getResultList();