Eclipselink JPA标准格式选择日期

时间:2014-12-02 21:43:20

标签: mysql spring jpa eclipselink criteria-api

我正在开发一个使用Spring 4 MVC和EclipseLink with MySQL的Web应用程序。我目前正在使用条件查询来获取带有日期字段的结果。我有以下代码:

    CriteriaBuilder criteriaBuilder = entityManager().getCriteriaBuilder();
    CriteriaQuery<Tuple> query = criteriaBuilder.createTupleQuery();

    Root<SsiCheque> fromSsiCheque = query.from(SsiCheque.class);
    List<Predicate> predicates = new ArrayList<Predicate>();

    if(parameters.containsKey("cheNumero")){
        System.out.println("Param " + parameters.get("cheNumero"));
        predicates.add(criteriaBuilder.like(fromSsiCheque.<String>get("cheNumero"), "%" + parameters.get("cheNumero") + "%"));
    }
    if(parameters.containsKey("cheFechas")){
        SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");

        String[] fechas = parameters.get("cheFechas").split(" - ");
        try {
            predicates.add(criteriaBuilder.between(fromSsiCheque.<Date>get("cheFecha"), formatter.parse(fechas[0]), formatter.parse(fechas[1])));
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
    if(parameters.containsKey("cheReceptor")){
        predicates.add(criteriaBuilder.like(fromSsiCheque.<String>get("cheReceptor"), "%" + parameters.get("cheReceptor") + "%" ));
    }

    query.multiselect(fromSsiCheque.get("cheId"), fromSsiCheque.get("cheNumero"), 
            fromSsiCheque.get("cheReceptor"), fromSsiCheque.get("cheMonto"), 
            criteriaBuilder.function("DATE_FORMAT",
                    String.class, fromSsiCheque.<Date>get("cheFecha"),
                    criteriaBuilder.literal("'%d/%m/%Y'")).alias("cheFecha"), fromSsiCheque.get("cheConcepto"))
    .where(predicates.toArray(new Predicate[]{}));

    TypedQuery<Tuple> typed = entityManager().createQuery(query);

问题出在多选部分,我在这里定义了一个日期,用dd / MM / yyyy返回并格式化为MySQL函数 DATE_FORMAT

                criteriaBuilder.function("DATE_FORMAT",
                        String.class, fromSsiCheque.<Date>get("cheFecha"),
                        criteriaBuilder.literal("'%d/%m/%Y'")).alias("cheFecha")

在某些帖子中,该功能称为 TO_CHAR ,但它似乎是Oracle数据库API的一部分。

这里奇怪的是我没有收到错误(也许我需要更改日志记录级别)但是没有工作。

另外,我将persistence.xml设置为显示生成的sql,如下所示:

SELECT che_id, che_numero, che_receptor, che_monto, DATE_FORMAT(che_fecha, ?), che_concepto FROM ssi_cheque WHERE che_numero LIKE ?
    bind => [%d/%m/%Y, %12%]

我的条件查询中缺少什么,以显示日期格式?

由于

更新

我从数据库得到的是1416895200000(我猜的日期字段,以毫秒为单位)。

由于

0 个答案:

没有答案