Criteria API definisce function expression
per eseguire funzioni SQL native nel CriteriaBuilder
interfaccia come segue:
<T> Expression<T> function(String name, Class<T> type, Expression<?>... args);
dove name
è il nome della funzione SQL, type
è il tipo restituito previsto e args
è un elenco variabile di argomenti (se presenti).
Ecco un esempio di come utilizzarlo in una query Criteri:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery(String.class);
Root<RadExamTimes> root = cq.from(RadExamTimes.class);
cq.select( cb.function("to_char", String.class, root.get("begin_exam"), cb.literal("MM/DD/YYYY")));
TypedQuery<String> query = entityManager.createQuery(cq);
List<String> result = query.getResultList();
dove
RadExamTimes
:un'ipotetica entità radiceMM/DD/YYYY
:un formato specifico del database (in questo esempio il formato della data Postgresql; per Oracle usa il formato Ora, ecc.)to_char
:funzione Postgresql per convertire il valore della data in stringabegin_exam
:il campo della data da formattare
La stringa di formato non può essere passata così com'è in modo che literal()
viene utilizzato per avvolgerlo.
Nota:l'esempio sopra è testato su database MySQL con funzione MySQL e formato data corrispondente; ma l'esempio è cambiato per corrispondere alla sintassi di Postgresql.