HQL语句中的数据类型转换

         我们需要从数据库中取出序号最大的记录,想到的方法就是使用order by子句进行排序(desc倒序),然后取出第一个对象,可是当初设计数据库时(我们是在原来的数据库的基础上开发新系统),竟然将序号字段的类型设成了varchar2,真是让人郁闷,这样的话,如果排序的话,就是对字符串排序,12是比2小的数,那么就需要转换一下类型。上网查查了,只有一位网友遇到同样的问题了,可是没人解答他的问题,但是他的一段代码启发了我:

     以下写法调整中是错误的,不能执行,报空指针错误.
         select cast(t.a as Integer) from table_1 t

    我也使用了这段代码,同样报空指针异常,不知道怎么回事,我的脑袋里突然冒出一个想法,将Integer的I变为小写,代码如下:

  

java 代码
  1. public List findByPlanId(String id){   
  2.     return getHibernateTemplate().find("from edu.bjtu.port.domain.DetailOfPlanForDayAndNight p where p.id.planId=? order by cast(p.id.detailId as integer) desc",id);   
  3. }  

          JUnit绿条亮起~成功了~

 

        这段代码的另一个让我注意的地方是,当使用复合主键时,创建一个主键类,然后想要使用其中的一个主键进行查询,必须要这样写p(实体类).id(主键类).planId(其中的某个主键),下面是对应的配置文件:

     

xml 代码
  1. <class name="edu.bjtu.port.domain.DetailOfPlanForDayAndNight" table="PD1_DNPLAN_DTL" schema="SOMIS">  
  2.        <composite-id name="id" class="edu.bjtu.port.domain.DetailOfPlanForDayAndNightId">  
  3.            <key-property name="planId" type="java.lang.String">  
  4.                <column name="DNPLANID" length="8" />  
  5.            </key-property>  
  6.            <key-property name="detailId" type="java.lang.String">  
  7.                <column name="NO" length="2" />  
  8.            </key-property>  
  9.        </composite-id>  

          其实这个问题在Hibernate开发手册中有写,只是我还没看到,之所以想到这样写,完全是突然灵光乍现。不过看来手册还要继续好好研究啊~

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值