Criteria API define function expression
para ejecutar funciones SQL nativas en el CriteriaBuilder
interfaz de la siguiente manera:
<T> Expression<T> function(String name, Class<T> type, Expression<?>... args);
donde name
es el nombre de la función SQL, type
es el tipo de retorno esperado y args
es una lista variable de argumentos (si los hay).
Aquí hay un ejemplo de cómo usarlo en una consulta de Criterios:
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();
donde
RadExamTimes
:una entidad raíz hipotéticaMM/DD/YYYY
:un formato específico de la base de datos (en este ejemplo, formato de fecha Postgresql; para Oracle, utilice el formato Ora, etc.)to_char
:función de Postgresql para convertir el valor de la fecha en una cadenabegin_exam
:el campo de fecha a ser formateado
La cadena de formato no se puede pasar tal cual para que literal()
se usa el método para envolverlo.
Nota:El ejemplo anterior se prueba en la base de datos MySQL con la función MySQL y el formato de fecha correspondiente; pero el ejemplo cambió para coincidir con la sintaxis de Postgresql.