Seleccione MAX marca de tiempo con JPA2 Criterios API

Así que mi entidad ha:

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

Mi generado Metamodelo tiene:

public static volatile SingularAttribute<MyEntity,Timestamp> timestamp;

Quiero a seleccionar por el máximo valor de marca de tiempo:

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

Pero no puedo porque:

max(Expression<N> x)
Crear una expresión de agregado de aplicar el numérico de la operación máx.
<N extends java.lang.Number> Expresión

De curso Timestamp no se extiende Number.

¿Cómo puedo hacer un MAX en un Timestamp columna con el typesafe Criterios API ?

InformationsquelleAutor planetjones | 2012-03-08

1 Kommentar

  1. 46

    Lugar de max tienes que utilizar CriteriaBuilder.mayor para la marca de tiempo (y para la Fecha, Cadena y otros Comparables así). Y si alguna vez necesita minutos para la hora, a continuación, utilizar menos el método en lugar

    El mismo tipo de problema se puede afrontar con menor/mayor/igual comparaciones. Firs uno acepta el argumento que se extiende Número, la segunda es para otros comparables:

    • Gracias Mikko – me perdí en la API de google docs.
    • sub.donde(cb.mayor(historias.get(«activeDate»))); [ERROR] se requiere: javax.la persistencia.criterios.La expresión<X> [ERROR] se encuentran: javax.la persistencia.criterios.Ruta<java.lang.Objeto> [ERROR] razón: tipo inferido no se ajusta a la parte superior atado(s)
    • mismo problema, ¿qué hago?
    • Yo uso max en lugar de sub.donde(cb.max(historias.get(History_.activeDate.getName())));
    • Y CriteriaBuilder menos() para MIN.
    • Sí, eso es lo que se dijo en la segunda oración.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea