API за критерии дефинира function expression
за изпълнение на собствени SQL функции в CriteriaBuilder
интерфейс, както следва:
<T> Expression<T> function(String name, Class<T> type, Expression<?>... args);
където name
е името на SQL функцията, type
е очакваният тип връщане и args
е променлив списък от аргументи (ако има такива).
Ето пример как да го използвате в заявка за критерии:
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();
където
RadExamTimes
:хипотетичен коренен обектMM/DD/YYYY
:специфичен за базата данни формат (в този пример Postgresql формат за дата; за Oracle използвайте Ora формат и т.н.)to_char
:Функция Postgresql за преобразуване на стойност на дата в низbegin_exam
:полето за дата, което трябва да бъде форматирано
Форматиращият низ не може да бъде предаден такъв, какъвто е, така че literal()
се използва метод за обвиване.
Забележка:Горният пример е тестван върху MySQL база данни с MySQL функция и съответния формат на датата; но примерът е променен, за да съответства на синтаксиса на Postgresql.