Hibernate setParameter 报错 Unknown parameter position: 0

项目中Hibernate的版本之前是3点几的,后面由于spring升级到5不得不把hibernate也升级到了5(5.2.13.Final)集成之后发现一大堆Deprecated的提示,其中较多的地方就是Query问题,旧版的用的是:

org.hibernate.Query

我看到这个对象已经被Deprecated掉了,已经被:

org.hibernate.query.Query

替换掉了,想到以后混用的话维护起来麻烦,一狠心把所有的org.hibernate.Query都替换掉了

然而问题来了,以前遗留的代码中用position设置参数的地方出了问题:

query.setParameter(0, name);

我本以为是下标不是从0开始的,换成1也是有问题。后来发现是这个方法只能对原生sql进行绑定,不能对HQL参数进行绑定,这就让我忍不住吐槽了,升级了新版本居然不兼容旧版本,但是既然都换,了,也只能硬着头皮把所有的地方都用名称绑定的方式替换掉了:

String sql = "select bean from TDtl bean where bean.billno=:billno";
Query query = getSession().createQuery(sql);
query.setParameter("billno", billno);

这种坑我真的不想多说什么,hibernate5很多写法都换了,其中一个更坑的地方,把查询结果转换成其他对象的方法(项目中多处用到):

   /**
     * Set a strategy for handling the query results. This can be used to change
     * "shape" of the query result.
     *
     * @param transformer The transformer to apply
     *
     * @return this (for method chaining)
     *
     * @deprecated (since 5.2)
     * @todo develop a new approach to result transformers
     */
    @Deprecated
    Query<R> setResultTransformer(ResultTransformer transformer);

被Deprecated我就不说什么了,我以为你有替代的方法,结果直接给我来了个todo,无语凝噎。所以这个方法还在用,只能等它什么时候有替换了再说。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 30,007评论 8 265
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,120评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,150评论 6 342
  • 你眯着眼,搬着马扎,坐到院子里 圈里几只羊,在吃草 羊在吃草,你在看 饿了便啃口馍馍 你在吃馍,羊在吃草 你驼着背...
    王霄垚阅读 3,273评论 6 4
  • 不管位于何处,心静自然凉!
    东泽666阅读 1,202评论 0 2

友情链接更多精彩内容