Hibernateクエリの例(HQL)

Hibernate Queryの例(HQL)

HibernateはHibernate Query Language(HQL)という名前の新しい言語を作成しました。構文はデータベースSQL言語に非常に似ています。 の主な違いはHQL uses class name instead of table name, and property names instead of column nameです。

HQLの学習と使用は非常に簡単であり、コードは常に一目瞭然です。

1. HQL選択クエリの例

在庫コードが「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更新クエリの例

銘柄名を「DIALOG1」に更新します。ここで、銘柄コードは「7277」です。

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

query.executeUpdate()は、挿入、更新、または削除されたレコードの数を返します。