public class RankFunction implements SQLFunction {
public RankFunction() {
}
@Override
public Type getReturnType(Type arg0, Mapping arg1) throws QueryException {
return Hibernate.INTEGER;
}
@Override
public boolean hasArguments() {
return true;
}
@Override
public boolean hasParenthesesIfNoArguments() {
return true;
}
@Override
public String render(List args, SessionFactoryImplementor factory) throws QueryException {
if (args.size() != 1) {
throw new IllegalArgumentException("RankFunction requires 1 argument!");
}
return "rank() over(order by " + args.get(0) + ") ";
}
}
<pre name="code" class="java">// 自定义言类,替换beans.xml默认方言
public class SQLServer2005Dialect extends SQLServerDialect {
public SQLServer2005Dialect() {
registerFunction("rank", new RankFunction());
}
}
我用的sqlserver2005
自定义hibernate方言即可,在hql中调用
select rank(column) from table