【发布时间】:2017-01-15 05:25:00
【问题描述】:
我想实现 DataTable 的服务器端过滤。这是检索列表的服务方法:
@Override
@Transactional
public List<User> list(int start, int length, String search, int triIdx, String ordreTri) {
String hql = "from User ";
if (!search.equals("") && search != null) {
hql = hql.concat(" where ");
if (NumberUtils.isNumber(search))
hql = hql.concat(" salary ");
else
hql = hql.concat(" lower(username) ");
hql = hql.concat(" like lower('%:critere%') ");
}
if (ordreTri.equals("asc")) {
switch (triIdx) {
case 0:
hql = hql.concat(" order by username ");
break;
case 1:
hql = hql.concat(" order by email ");
break;
case 2:
hql = hql.concat(" order by salary ");
break;
default:
hql = hql.concat(" order by username ");
break;
}
} else {
switch (triIdx) {
case 0:
hql = hql.concat(" order by username desc");
break;
case 1:
hql = hql.concat(" order by email desc");
break;
case 2:
hql = hql.concat(" order by salary desc");
break;
default:
hql = hql.concat(" order by username desc");
break;
}
}
Query query = sessionFactory.getCurrentSession().createQuery(hql);
query = query.setParameter("critere",search);
query = query.setFirstResult(start);
query = query.setMaxResults(length);
@SuppressWarnings("unchecked")
List<User> listUser = (List<User>) query.list();
return listUser;
}
在运行时,我收到有关数据的 dataTable 警报错误。那么我的代码有什么问题呢?
【问题讨论】:
-
没有标准。您的字符串被转义,因此查询按原样执行并且不包含名为
critere的条件。在设置它之前删除转义和前缀/后缀%。
标签: spring hibernate spring-mvc spring-4 hibernate-4.x