開発者ドキュメント

Hibernateクエリの例(HQL)

HibernateはHibernate Query Language(HQL)という名前の新しい言語を作成しました。この構文はデータベースのSQL言語に非常によく似ています。主な相違点は、

HQLは表名の代わりにクラス名を使用し、列名

ではなくプロパティ名を使用することです。

HQLは非常に学習して使いやすく、コードは常に自明です。

1. HQL Select Queryの例

株価コードが「7277」の株データを取得します。

Query query = session.createQuery("from Stock where stockCode = :code ");
query.setParameter("code", "7277");
List list = query.list();
Query query = session.createQuery("from Stock where stockCode = '7277' ");
List list = query.list();

2. HQL更新クエリの例

株式コードが「7277」の株価を「DIALOG1」に更新します。

Query query = session.createQuery("update Stock set stockName = :stockName" +
                    " where stockCode = :stockCode");
query.setParameter("stockName", "DIALOG1");
query.setParameter("stockCode", "7277");
int result = query.executeUpdate();
Query query = session.createQuery("update Stock set stockName = 'DIALOG2'" +
                    " where stockCode = '7277'");
int result = query.executeUpdate();

3. HQL削除クエリの例

株式コードが「7277」の株を削除します。

Query query = session.createQuery("delete Stock where stockCode = :stockCode");
query.setParameter("stockCode", "7277");
int result = query.executeUpdate();
Query query = session.createQuery("delete Stock where stockCode = '7277'");
int result = query.executeUpdate();

4. HQLの挿入クエリの例

HQLでは、INSERT INTO …​ SELECT …​のみがサポートされています。 INSERT INTO …​ VALUESはありません。 HQLは、別のテーブルからの挿入だけをサポートします。例えば

"insert into Object (id, name) select oo.id, oo.name from OtherObject oo";

別のbackup__stockテーブルから在庫レコードを挿入します。これは、一括挿入ステートメントとも呼ばれます。

Query query = session.createQuery("insert into Stock(stock__code, stock__name)" +
                "select stock__code, stock__name from backup__stock");
int result = query.executeUpdate();
モバイルバージョンを終了