hibernate是orm映射工具之一,极大的便利了开发,面向对象的思想也得到实现。方便开发的同时,偶尔也会带来一些意想不到的小坑。
在做mes系统的时候,架构就是采用了hibernate,而底层类也对hibernate进行了进一步的封装,进行crud操作时拥有众多方法可以实现不同的crud需求。
在平时开发的时候,如果只用hql进行简单查询就可以直接在IDE中写了。但是要是比较复杂点的hql,习惯先在pl/sql中把sql写好,然后再按照hql修改一下。在pl/sql写sql习惯了在语句的末尾加上分号; 但是这个习惯放到hibernate中就不行了。由于hibernate的面向对象性,操作的都是实体对象,语句末尾的分号识别不出来,就会报错:
@Override
public ToOrder findByPlantAndModel(Long plantId, Long modelId) {
String hql = "from ToOrder c where c.tmPlantId = :tmPlantId and c.tmModelId = :tmModelId;";
Map<String, Object> params = new HashMap<String, Object>();
params.put("tmPlantId", plantId);
params.put("tmModelId", modelId);
return getDao().uniqueResult(hql, params);
}====>
10:52:02,815 WARN org.hibernate.util.JDBCExceptionReporter:100 - SQL Error: 911, SQLState: 42000
10:52:02,819 ERROR org.hibernate.util.JDBCExceptionReporter:101 - ORA-00911: 无效字符
如果不注意的话,会认为是实体对象的属性写错了或者是其他的函数调用写错了。sql简单点还容易看出来,假如是特别长特别复杂的语句就比较容易忽略这个点。
938

被折叠的 条评论
为什么被折叠?



