我需要帮助才能使用CriteriaBuilder进行数据查询,我会在这里留下代码,但它似乎不起作用。当字段在Object列表中时,我还需要知道如何进行查询。
public List<Contenido> getAll(Class<Contenido> clase, Map predicados, int offset, int limit, String orderField, int ordenamiento, List<Long> categorias) {
final List<Predicate> andPredicates = new ArrayList<Predicate>();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Contenido> cq = cb.createQuery(Contenido.class);
Root<Contenido> contenido = cq.from(Contenido.class);
cq.select(contenido);
Predicate predicate = cb.conjunction();
//this works
if (predicados.get("titulo") != null) {
andPredicates.add(cb.and(cb.like(contenido.<String>get("titulo"), "%" + predicados.get("titulo") + "%")));
}
//this works
if (predicados.get("subtitulo") != null) {
andPredicates.add(cb.and(cb.like(contenido.<String>get("subtitulo"), "%" + predicados.get("subtitulo") + "%")));
}
//this works
if (predicados.get("descripcion") != null) {
andPredicates.add(cb.and(cb.like(contenido.<String>get("descripcion"), "%" + predicados.get("descripcion") + "%")));
}
//doesn't work, Object list query
if (predicados.get("categoria") != null) {
andPredicates.add(cb.and(contenido.<List<Categoria>>get("categorias").<String>get("nombre").in(predicados.get("categoria"))));
}
//doesn't work (Date query)
if (predicados.get("fecha") != null) {
ParameterExpression<Date> param = cb.parameter(Date.class, "fecha");
andPredicates.add(cb.equal(contenido.<Date>get("fecha"), param));
}