Hibernate执行原生SQL别名导致的一个Bug

来源:互联网 发布:苏州相城淘宝运营培训 编辑:程序博客网 时间:2024/05/16 18:28

原生sql:

 

select

A.ID_ ,

A.NAME_, 

B.NAME_  

from jbpm_task A 

inner join jbpm_processdefinition B on(A.PROCESSDEFINITION_=B.ID_)

order by B.NAME_ 

 

这个项目错误很隐蔽所以写出来警醒自己,这个sql在外围执行很成功,但是NAME出现了重名,导致查询出来的列段覆盖。

 

 

SQL独立查询:

 

结果:

 

1发文CAAAForSendDoc

2主任阅示CAAAForSendDoc

3领导审核CAAAForSendDoc

4办理CAAAForSendDoc

 

但是使用Hibernate查询

 

打印结果是:

 

1发文 发文

2主任阅示 主任阅示

3领导审核 领导审核

4办理 办理

 

修改如下:

 

<sql-query name="GetTasksDef">

    <return-scalar column="ID" type="long"/>

    <return-scalar column="TASKNAME" type="string"/>

    <return-scalar column="WFNAME" type="string"/>

<![CDATA[

   select

A.ID_ as ID,

A.NAME_ as TASKNAME, 

B.NAME_ as WFNAME  

from jbpm_task A 

inner join jbpm_processdefinition B on(A.PROCESSDEFINITION_=B.ID_)

order by B.NAME_ 

]]>

</sql-query>

 

使用Hibernate别名调用即可正确。

原创粉丝点击