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();