在一个配置文件中定义named native query,然后调用之
<sql-query name="queryAllMessages">
  <return alias="messages" class="your.package.Message"/>
  select   *   from   (select   ID,AUTHOR,TITLE,CONTENT,STATE,ADDTIME, 
  TYPE,RECEIVED,   row_number()   over(order   by   addtime   desc)   rn   from   bs_messages 
  where   to_char(addtime,'yyyy-mm-dd')   between   
  to_char(SYSDATE   -   7,'yyyy-mm-dd')   and   to_char(SYSDATE   -   1,'yyyy-mm-dd')   
  and   state   =   'D')   where   rn <5
</sql-query>
然后,在代码里面这样调用:List messages = session.getNamedQuery("queryAllMessages").list();

解决方案 »

  1.   

    这里我假设你返回的字段刚好可以被包装为对象 your.package.Message。
      

  2.   

    但配置文件出错哦,
    因为 where   rn <5 这个  '<' 符号,配置文件不支持吧
      

  3.   

    那你这样好了:
    <sql-query name="queryAllMessages">
      <return alias="messages" class="your.package.Message"/>
      <![CDATA[select   *   from   (select   ID,AUTHOR,TITLE,CONTENT,STATE,ADDTIME, 
      TYPE,RECEIVED,   row_number()   over(order   by   addtime   desc)   rn   from   bs_messages 
      where   to_char(addtime,'yyyy-mm-dd')   between   
      to_char(SYSDATE   -   7,'yyyy-mm-dd')   and   to_char(SYSDATE   -   1,'yyyy-mm-dd')   
      and   state   =   'D')   where   rn <5
      ]]>
    </sql-query>这样就不会报错了