hibernate之坑

        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简单点还容易看出来,假如是特别长特别复杂的语句就比较容易忽略这个点。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值