Criteria API definieert function expression
om native SQL-functies uit te voeren in de CriteriaBuilder
interface als volgt:
<T> Expression<T> function(String name, Class<T> type, Expression<?>... args);
waar name
is de naam van de SQL-functie, type
is het verwachte retourtype en args
is een variabele lijst met argumenten (indien aanwezig).
Hier is een voorbeeld van hoe het te gebruiken in een Criteria-query:
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();
waar
RadExamTimes
:een hypothetische wortelentiteitMM/DD/YYYY
:een database-specifiek formaat (in dit voorbeeld Postgresql-datumformaat; voor Oracle gebruik Ora-formaat, enz.)to_char
:Postgresql-functie om datumwaarde naar string te converterenbegin_exam
:het datumveld dat moet worden opgemaakt
De opmaakreeks kan niet worden doorgegeven zoals deze is, zodat de literal()
methode wordt gebruikt om het in te pakken.
Opmerking:het bovenstaande voorbeeld is getest op MySQL-database met MySQL-functie en bijbehorende datumnotatie; maar het voorbeeld is gewijzigd om overeen te komen met de Postgresql-syntaxis.