Seleccione la marca de tiempo MÁXIMA con la API de criterios JPA2


Así que mi entidad tiene:

@Column(name="TS", nullable=false)
private java.sql.Timestamp timestamp; 

Mi metamodelo generado tiene:

public static volatile SingularAttribute<MyEntity,Timestamp> timestamp;

Quiero seleccionar por el valor Máximo de marca de tiempo:

Root<MyEntity> root = query.from(MyEntity.class);
Expression maxExpression = cb.max(root.get(MyEntity_.timestamp));

Pero no se me permite porque:

max(Expression<N> x) Cree una expresión agregada aplicando la operación numérica máxima. <N extends java.lang.Number> Expresión

Por supuesto, Timestamp no se extiende Number.

¿Cómo puedo hacer un MAX en una columna Timestamp usando la API de Criterios typesafe ?

Gracias.

Author: planetjones, 2012-03-08

1 answers

En lugar de max tienes que usar CriteriaBuilder.greatest para la marca de tiempo (y para la Fecha, Cadena y otros Comparables también). Y si alguna vez necesita MIN para la marca de tiempo, use el método menos en su lugar

Un problema similar puede ser enfrentado con comparaciones menos/mayores/iguales. El primero acepta el argumento que extiende el Número, el segundo es para otros comparables:

  • lt vs lessThan
  • le vs lessThanOrEqualTo
  • ge vs Mayor que el equivalente
  • gt vs. greaterThan
 41
Author: Mikko Maunu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-19 05:46:45