0
Я хочу реализовать фильтрацию данных DataTable на стороне сервера. Ниже приведен метод обслуживания для извлечения списка:Невозможно использовать выражение в where где
@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 о данных. Так что же не так в моем коде?
Там нет critera. Ваша строка экранирована, поэтому запрос выполняется как есть и не содержит критериев с именем «critere». Удалите escaping и prefix/суффикс ваших критериев с '%' перед его настройкой. –