Hql语句中占位符对应的传参的顺序,debug 浅析

代码写到一半突然想看看  HQL 是怎样 为这些占位符传参的,所以花了几分钟debug 看了一下



对于Hql 语句中占位符对应的参数的顺序是物理逻辑上的,还是逻辑顺序上的?

 

所谓的物理逻辑,也就是它们出现的顺序

List<String>productIdList = findHql(

            "SELECT idFROM ProductEntity WHERE productCategoryId = ? AND id IN"

            + "(SELECTproductId  FROMProductFilterItemRelEntity WHERE filterItemId=? AND  filterItemValue=?)",

            pd_product_category_id,fieldStr,dataStr);

 

 

1     pd_product_category_id

2            fieldStr

3            dataStr

 

换一下位置之后







1        fieldStr

2        dataStr

3        pd_product_category_id

如果是按照逻辑顺序的话,就应该是这样的顺序






首先,拿到pd_product_category_id 值为 41






fieldStr 值为0000001

 

dataStr  值为1-filter1

 





查找到的对象列表为空。




换回物理顺序之后,对象值不为空,大小为 1 









实际上,Hibernate 将参数放入Object数组中,对应的占位符的顺序匹配成Hql 然后再执行语句。

 

总结:Hql 语句的传参顺序并非按照逻辑顺序,而是按照物理顺序去匹配的。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值