JPAは使うべきではないと思われるできごとが発生した。
恥ずかしいながら、2013年にリリースされたJava EE 7を最近使い始めた。JPA2.1をIBM WebSphere Liberty Profile 19で動かしている。
JPQLではいろいろ苦戦していて、以下の問題に直面していた。
1.JPQLでHAVING文が使えない。
JOINを使用したJPQLで、
HAVING テーブルA.項目1 条件
と書かれたJPQLが正しく解析されない。最初は「項目1が見つからない」とのエラーが出たが、ようやく真相が分かるできごとが発生し、組み立てたSQLでは
HAVING テーブルB.項目1 条件
となっていた(たまたまテーブルAとテーブルB両方項目1という項目が存在し、SQLの組み立てまでエラーなくできた)。明らかなバッグだろう!!!
2.JOINを使用時、順番がおかしい。
SELECT XXXX
FROM テーブル1
INNER JOIN テーブル2 ON テーブル2の項目条件
LEFT OUTER JOIN テーブル3 ON テーブル2とテーブル3の項目条件
のJPQLを勝手に
SELECT XXXX
FROM テーブル1
LEFT OUTER JOIN テーブル3 ON テーブル2とテーブル3の項目条件
,テーブル2
WHERE テーブル2の項目条件
に組み立てて、赤字の条件でSQLの解析エラーになっていた。仕方なくテーブル2のJOINをLEFT OUTER JOINに変えざるを得なかった。
3.数式を勝手に書き換えられた。(もうJPAをやめたい!)
SELECT A - B - SUM(C) FROM XXXX
と書いたJPQLの実行結果がおかしい。実際に組み立てたSQLを見ると、
SELECT A - ( B - SUM(C) ) FROM XXXX
となっていた!勝手に括弧を入れられていた!!!
もうJPAをやめたい!!!