当前位置: 代码迷 >> SQL >> 扩充hibernate Criteria的Order使其支持sql片段(oracle)
  详细解决方案

扩充hibernate Criteria的Order使其支持sql片段(oracle)

热度:41   发布时间:2016-05-05 13:08:49.0
扩展hibernate Criteria的Order使其支持sql片段(oracle)

? ? ? ?Criteria的Order功能简洁,只支持按照某个属性(字段)的排序,如果想要实现order by min(id) 这样的应用场景就没戏儿了,起初我想用interceptor的onPrepareStatement()修改sql,但受困于spring管理事务,如用interceptor就得所用的session都使用interceptor,而不能做到灵活使用。我们知道projection和Restrictions都支持嵌入某个sql片段,我们就参照他们实现一个吧具体代码如下:public class UDOrder extends Order {

		private String sql;		/**	 * 	 */	private static final long serialVersionUID = 6069765923185860527L;	public UDOrder(String propertyName, boolean ascending) {		super(propertyName, ascending);		this.sql = propertyName;	}		@Override	public String toString() {				return sql;	}	@Override	public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery)			throws HibernateException {				return StringHelper.replace( sql, "{alias}", criteriaQuery.getSQLAlias(criteria) );	}		public static Order sql(String sql){				return new UDOrder(sql, true);	}		}

?

  相关解决方案