JPA使用中のいくつの問題点

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をやめたい!!!