ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

HibernateでHQL

とりあえず、HQLの中でorパッケージってのは使えないことが分かりました。使ってみると、以下のようなエラーが発生します。まあ、ORが予約語だからっていう理由でしょうね。きっと。

Caused by: line 1:6: unexpected token: or

というわけで、orパッケージは廃止して、omパッケージにしてみました。これでエラーは発生しなくなりました。
で、早速HQLでテーブルジョインするサンプル書いてみたんですが、これがmany-to-oneでfetch="join"したものと比べて2倍くらい遅い。正確な数字は取っていないのですが。
ちなみにHQL的には、

from Orders o inner join o.customer c inner join o.item i where o.id = :id

って書いても、

from Orders o, Customer c, Item i where o.customer.id = c.id AND o.item.id = i.id AND o.id = :id

って書いてもOKみたいですが、なんとなく後者の方が分かりやすいと感じてしまうのは、SQLに慣れているせいでしょう。あからさまに前者の方が簡潔なのですが。