重写hibernate的Criteria的order排序方式

hibernate用起来是非常方便,但是还是没有自己写sql那么方便,比如自己定义一个排序方式可以用

   case 要排序的字段 when '42' then 1

    when '137' then 2

    when '136' then 3

    end;

这样就可以实现自定义排序,但是new DetachedCriteria().addOrder(Order.desc("要排序的字段"));

只能根据一个字段的升序和降序,想要实现自定义就必须继承Order父类然后重写

贴上代码

/**
 * OracleOrder.java
 * com.cl.business.pcdm.util
 * 2017年12月29日 Shinelon
 *
 * Copyright (c) 2017, TNT All Rights Reserved.
*/

package com.cl.business.pcdm.util;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.criterion.CriteriaQuery;
import org.hibernate.criterion.Order;

/**
 * ClassName:OracleOrder
 * Function: TODO 自定义order 排序
 *
 * @author   lxw
 * @version  
 * @since    JDK1.7
 * @Date	 2017	2017年12月29日		下午4:30:37
 *
 * @see 	 参考目标类
 */
public class OracleOrder extends Order {

	/**
	 * serialVersionUID:TODO(用一句话描述这个变量表示什么)
	 *
	 * @since JDK1.7
	 */
	
	private static final long serialVersionUID = 1L;
	
	private String propertyName;  
    private boolean ascending; 

	protected OracleOrder(String propertyName, boolean ascending) {
		
		super(propertyName, ascending);
		this.propertyName = propertyName;  
        this.ascending = ascending; 
		
	}
	
	
	public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery)  
            throws HibernateException {  
        String[] columns = criteriaQuery.getColumnsUsingProjection(criteria,  
                propertyName);  
        //在这里自定义你的字段
        return " case "+columns[0]+" when '42' then 1 "
        		+ "when '138' then 2 "
        		+ "when '136' then 3 "
        		+ "when '137' then 4 end ";  
    }  
	
	public static OracleOrder getOrder(String propertyName ) {  
        return new OracleOrder(propertyName, true);  
    }  

}

//最后在你的类中引用
new DetachedCriteria().addOrder(OracleOrder.getOrder("要排序的字段")) ;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值