JPA2.1のJPQLで増えたFunction関数を試してみる

JPA2.0からJPA2.1でJPQLにFunctionというキーワードが増えました。
データベースにすでに準備されている、もしくはユーザーが定義したプロシージャを実行することが出来る機能です。

  • JPQL
select e from NewEntity e where function('TAN', e.dbl) > 0

※TANはDerbyにもともと用意されているタンジェントを返す関数。
実行すると以下の様なSQLとして実行されます。

SELECT ID AS a1, DBL AS a2 FROM NEWENTITY WHERE (TAN(DBL) > ?)

今まで、JPQLを実行するときはJPQLとして定義されている組み込み関数しか使えなかったけれども、これでJPQLでも個々のDBに用意されているプロシージャを呼ぶことができるようになりました。*1

これでNativeQueryに頼らなくてもよい場面が増えそうですね。

*1:実際はHibernateとかプロバイダ実装によっては以前からできていた。