Hibernate native sql s0022错误 column "name" not found

来源:互联网 发布:安徽预算软件 编辑:程序博客网 时间:2024/04/26 21:28

     hibernate在我们的项目中确实提供了很大的方便,提高了项目的开发进度,它的缓存机制也提高了我们的查询效率;但它在一定程度上也降低了程序的运行性能,在进行复杂的查询时,为了提高查询效率,我们还会不知觉的去使用sql进行查询,使用hibernate的native sql时,当我们的查询过于复杂时,将会出现各种各样的问题。

     最近做一个项目时就遇到了一个很头疼的问题,报的是s0022错误,column “name” not found。一开始我认为这是因为查询的sql语句中有重复的名字引起的,但添加了别名后,仍是报这个错误,经过我不懈的努力终于解决了这个问题。

     有两张表:

     A   字段 id,name,sex,typeId   ,B  字段  id,typeName

    我的sql语句写在hbm.xml文件中:

     未修改前的语句:

    <sql-query>

      select a.name as stuName,a.sex as sex,b.id as stuId,b.type as type from A as a inner join B b on a.typeId=b.id

   </sql-query>

     修改之后的语句:

    <sql-query>

       <return-type name="stuName"  type="int"/>

       <return-type name="sex"  type="string"/>

       <return-type name="stuId"  type="int"/>

       <return-type name="type"  type="string"/>

      select a.name as stuName,a.sex as sex,a.id as stuId,b.type as typeName from A as a inner join B b on a.typeId=b.id

   </sql-query>

   这样问题就解决了:因为hibernate会在ResultSetMetadata类中判断数据库中实际查询出来的数据的顺序和类型,如果类型不一致,就会报s0022 column "name" not found 的错误。

原创粉丝点击