2008年7月15日 星期二

让Hibernate支持Informix真正意义上的分页方法

这种分页方式只支持10或者10以上的版本.

建一个类InformixDialect继承org.hibernate.dialect.InformixDialect.

并重写下面几个方法useMaxForLimit();supportsLimitOffset();(String querySelect, int offset, int limit);

在Hibernate的配置中hibernate.dialect=您重写的这个类InformixDialect

具体代码见下:

import java.sql.Types;

import org.hibernate.Hibernate;

public class InformixDialect extends org.hibernate.dialect.InformixDialect {

public InformixDialect() {
super();
registerHibernateType(Types.DECIMAL, Hibernate.BIG_DECIMAL.getName());
}

public boolean useMaxForLimit() {
return false;
}

public boolean supportsLimitOffset() {
return true;
}

public String getLimitString(String querySelect, int offset, int limit) {
// if (offset>0) throw new UnsupportedOperationException("informix has
// no offset");
return new StringBuffer(querySelect.length() + 8).append(querySelect)
.insert(querySelect.toLowerCase().indexOf("select") + 6,
" skip " + offset + " first " + limit).toString();
}

}

0 评论: