这两天做项目,框架用的是spring-data-jpa,说白了,里面用的就是hibernate的东西。在查询时有一个表的主次关联查询,sql中有一个相同的列名。
当这个时候,你去执行entityManager.createNativeQuery得到query后,执行query.getResultSet 方法时,出现报错。报错的内容就是该列未找到,这时候看看hibernate内部的
处理方式,了解到resultSetMetaData.getColumnLabel()。
Gets the designated column's suggested title for use in printouts and
* displays. The suggested title is usually specified by the SQL <code>AS</code>
* clause. If a SQL <code>AS</code> is not specified, the value returned from
* <code>getColumnLabel</code> will be the same as the value returned by the
* <code>getColumnName</code> method.
看看这个方法的注释大家都很清楚了,他就是认为列名就是他的唯一标识了,
只要加一个函数 像ifnull('列名','')就可以了解决这个问题了。。
还有一种方式就是,有相同的列的话加上别名,然后把别名放在 createNativeQuery().addScalar("别名"),然后执行后续操作就ok了
平时遇到的问题,解决之道记下来,以供参考,当然还有很多方式,希望大家可以分享