Hibernateには、次の二つのQueryがある。
- createQuery
- createNativeQuery
分かりにくいけど、これらは違う。
createQuery とは
CreateQuery は、JPQL (Jakarta Persistence Query Language) を使います。
JPQLについては、以前は、Java Persistence Query Language と呼ばれていたようです。
この言語の使い方は以下をご覧ください。
・https://qiita.com/opengl-8080/items/e074330b5f4862d9995f
createQueryでは、バインド変数は
id1=:a
のように文字として指定して変数をセットします。
1 2 3 |
query = session.createQuery("select m from TableA m where id1=:a and id2=:b"); query.setParameter("a", ID1); query.setParameter("b", ID2); |
createNativeQuery とは
createNativeQuery は、ネイティブのSQLを実行可能です。
createNativeQueryでは、バインド変数は
id1=?1
のように指定して変数をセットします。
1 2 |
query = session.createNativeQuery("select * from TableA where id1=?1"); query.setParameter(1, ID1); |
ネイティブのSQL文がそのまま使えます。
createQueryでなくて、createNativeQueryを使う理由として
- createNativeQueryの方がローレベルアクセスかのうであり、最適化を自分自身で行える。
- すでにSQLを知っているのでJPQLを新たに覚えたくない
- すでに書かれたSQL文があり、それをJPQLに変換するのが手間だ
コメント