我正在开发一个使用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(我猜的日期字段,以毫秒为单位)。
由于