Criteria API definuje function expression
spouštět nativní funkce SQL v CriteriaBuilder
rozhraní takto:
<T> Expression<T> function(String name, Class<T> type, Expression<?>... args);
kde name
je název funkce SQL, type
je očekávaný návratový typ a args
je proměnný seznam argumentů (pokud existují).
Zde je příklad, jak jej použít v dotazu na kritéria:
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();
kde
RadExamTimes
:hypotetická kořenová entitaMM/DD/YYYY
:formát specifický pro databázi (v tomto příkladu formát data Postgresql; pro Oracle použijte formát Ora atd.)to_char
:Funkce Postgresql pro převod hodnoty data na řetězecbegin_exam
:pole data, které se má formátovat
Formátovací řetězec nelze předat tak, jak je, takže literal()
k jeho zabalení se používá metoda.
Poznámka:Výše uvedený příklad je testován na databázi MySQL s funkcí MySQL a odpovídajícím formátem data; ale příklad se změnil tak, aby odpovídal syntaxi Postgresql.