0
Ich möchte eine serverseitige Filterung von DataTable implementieren. Hier ist die Service-Methode zum Abrufen der Liste:Kann Ausdruck nicht in Where-Klausel verwenden
@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;
}
Zur Laufzeit bekomme ich einen DataTable-Alert-Fehler über Daten. Was ist falsch in meinem Code?
Es gibt keine critera. Ihre Zeichenkette ist maskiert, daher wird die Abfrage so ausgeführt, wie sie ist und enthält keine Kriterien mit dem Namen "kritische". Entfernen Sie das Escaping und Präfix/Suffix Ihrer Kriterien mit '%', bevor Sie es setzen. –