CriteriaAPIはfunction expression
を定義します CriteriaBuilder
でネイティブSQL関数を実行する 次のようなインターフェース:
<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構文に一致するように例が変更されました。