使用JPA CriteriaBuilder进行日期查询

时间:2016-07-31 23:34:53

标签: java mysql jpa

我需要帮助才能使用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));
    }    

0 个答案:

没有答案