美文网首页
Hibernate setParameter 报错 Unknow

Hibernate setParameter 报错 Unknow

作者: joveth | 来源:发表于2018-08-17 10:17 被阅读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,无语凝噎。所以这个方法还在用,只能等它什么时候有替换了再说。

    相关文章

      网友评论

          本文标题:Hibernate setParameter 报错 Unknow

          本文链接:https://www.haomeiwen.com/subject/tfhzbftx.html