L'API des critères définit l'function expression
pour exécuter des fonctions SQL natives dans le CriteriaBuilder
l'interface comme suit :
<T> Expression<T> function(String name, Class<T> type, Expression<?>... args);
où name
est le nom de la fonction SQL, type
est le type de retour attendu et args
est une liste variable d'arguments (le cas échéant).
Voici un exemple d'utilisation dans une requête Critères :
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();
où
RadExamTimes
:une entité racine hypothétiqueMM/DD/YYYY
:un format spécifique à la base de données (dans cet exemple, le format de date Postgresql ; pour Oracle, utilisez le format Ora, etc.)to_char
:Fonction Postgresql pour convertir la valeur de la date en chaînebegin_exam
:le champ date à formater
La chaîne de format ne peut pas être transmise telle quelle afin que le literal()
méthode est utilisée pour l'envelopper.
Remarque :L'exemple ci-dessus est testé sur la base de données MySQL avec la fonction MySQL et le format de date correspondant ; mais l'exemple a changé pour correspondre à la syntaxe Postgresql.