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

     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 的错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值