zoukankan      html  css  js  c++  java
  • 记一次JPA遇到的奇葩错误——本地sql不识别表名的别名

    记一次JPA遇到的奇葩错误——本地sql不识别表名的别名

    报错:Unknown column 'our' in 'field list'

    起因:需要本地sql查询后,分页返回自定义对象。报错信息如下:

    问题原因:

    因为是分页查询,当然需要知道数据的总数,所以hibernate会自动的执行sql帮你查询所有的数量,但是看下图就能发现,他把我的表名的别名当做字段来select count 了。

    解决办法:

    在本地sql即@Query里添加一个,countQuery,将你要查询的sql语句复制,手动select count (*),这样hibernate就不会去自己计数了,走的就是你写的这个计数sql。(因为当时sql不是很短,我就一直删减找问题,下面是解决后的大致样图):

     

     总结:

    可能是状态不是很好了,所以debug了很久都没有找出问题所在,下午5点多开始弄到8点,群里各种问,考虑过特殊字符,中文空格各种,都快怀疑人生了。今早头头帮我看了后,两分钟解决。。。调试能力还是太弱了。

    其实日志里面已经很清楚了,hibernate都打印出来执行的sql了,只是我没太注意那一条sql,如果注意到了可能能够面向百度解决吧。

    分析一下报错:

    1. unknown column 'xxx' in 'field list' 这明显说明有sql把你这个xxx当做字段了,而我这个是表名的别名,这样就能定位到sql错误

    2. 再从hibernate生成的语句中也能清晰看到 select count (xxx) ...... 这问题就很明显了。

    一直以来都觉得自己找错还是可以的,这次和头头debug的差距一下子让我认识到要学的还有很多,尤其是经验不足等。这种问题,它的出问题点都是能够看到的,下次注意仔细看报的异常以及框架打印的一些日志吧,从中获取些自己想要的信息。

  • 相关阅读:
    DOM_节点操作创建表格
    表单提交
    HTML常用标签
    网络通讯详解
    java===TCP(多线程多客户端同时上传字节数据:图片为例)
    java===TCP(文件上传功能)
    java===UDP
    java==IO=随机读写文件
    git中的基本命令
    ansible中roles的简单使用
  • 原文地址:https://www.cnblogs.com/deepSleeping/p/11356282.html
Copyright © 2011-2022 走看看