Criteria API definerer function expression
til at udføre native SQL-funktioner i CriteriaBuilder
interface som følger:
<T> Expression<T> function(String name, Class<T> type, Expression<?>... args);
hvor name
er navnet på SQL-funktionen, type
er den forventede returtype og args
er en variabel liste over argumenter (hvis nogen).
Her er et eksempel på, hvordan du bruger det i en kriterieforespørgsel:
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();
hvor
RadExamTimes
:en hypotetisk rodentitetMM/DD/YYYY
:et databasespecifikt format (i dette eksempel Postgresql-datoformat; for Oracle brug Ora-format osv.)to_char
:Postgresql-funktion til at konvertere datoværdi til strengbegin_exam
:datofeltet, der skal formateres
Formatstrengen kan ikke sendes som den er, så literal()
metoden bruges til at pakke den ind.
Bemærk:Ovenstående eksempel er testet på MySQL-database med MySQL-funktion og tilsvarende datoformat; men eksemplet blev ændret til at matche Postgresql-syntaksen.