2012-03-08 12 views
21

Quindi il mio soggetto ha:Selezionare MAX timestamp con criteri JPA2 API

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

mio Metamodel generato ha:

public static volatile SingularAttribute<MyEntity,Timestamp> timestamp; 

voglio selezionare dal valore Max Timestamp:

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

Ma non sono autorizzato perché:

max(Expression<N> x) Creare un'espressione aggregata che applica l'operazione numerica massima. <N extends java.lang.Number> Espressione

Naturalmente Timestamp non si estende Number.

Come posso fare un MAX su una colonna Timestamp utilizzando l'API dei criteri typesafe?

Grazie.

risposta

39

Invece di max devi utilizzare CriteriaBuilder.greatest per Timestamp (e per Data, Stringa e altri Comparabili). E se hai mai bisogno di MIN per il Timestamp, allora usa il metodo minimo invece

Simili tipi di problemi possono essere confrontati con confronti inferiori/maggiori/uguali. Abeti si accetta argomento che si estende Numero, secondo è per altri elementi comparabili:

  • lt vs. lessThan
  • le vs. lessThanOrEqualTo
  • ge vs. greaterThanOrEqualTo
  • gt vs. GreaterThan
+1

Grazie Mikko - L'ho perso nei documenti API. – planetjones

+0

sub.where (cb.greatest (histories.get ("activeDate"))); [ERRORE] richiesto: javax.persistence.criteria.Expression [ERRORE] trovato: javax.persistence.criteria.Path [ERRORE] ragione: tipo derivato non è conforme al limite superiore (s) –

Problemi correlati