本文主要是介绍hibernate之坑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
hibernate是orm映射工具之一,极大的便利了开发,面向对象的思想也得到实现。方便开发的同时,偶尔也会带来一些意想不到的小坑。
在做mes系统的时候,架构就是采用了hibernate,而底层类也对hibernate进行了进一步的封装,进行crud操作时拥有众多方法可以实现不同的crud需求。
在平时开发的时候,如果只用hql进行简单查询就可以直接在IDE中写了。但是要是比较复杂点的hql,习惯先在pl/sql中把sql写好,然后再按照hql修改一下。在pl/sql写sql习惯了在语句的末尾加上分号; 但是这个习惯放到hibernate中就不行了。由于hibernate的面向对象性,操作的都是实体对象,语句末尾的分号识别不出来,就会报错:
@Overridepublic 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简单点还容易看出来,假如是特别长特别复杂的语句就比较容易忽略这个点。
这篇关于hibernate之坑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!