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 setResultTransformer(ResultTransformer transformer);

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

你可能感兴趣的:(Hibernate setParameter 报错 Unknown parameter position: 0)