検索

13.4.6. 一括更新、挿入、削除について

download PDF
Hibernate では、Data Manipulation Language (DML) を使用して、Hibernate Query Language を介して、マップされたデータベースにへのデータの直接挿入、更新、および削除を一括で行うことができます。
警告
複数のオブジェクトまたは関係マッピングに違反し、オブジェクト状態に影響を与える可能性があります。オブジェクト状態は、基盤のデータベースで実行される操作によって、メモリー内オブジェクトの状態が影響を受けることはありません。インメモリーデータは、インメモリーデータが使用される場合は注意して使用する必要があります。
UPDATE および DELETE ステートメントの疑似構文は次のとおりです。(更新 | 削除)FROM?EntityName (WHERE where_conditions)?.
注記
FROM キーワードおよび WHERE Clause はオプションです。
UPDATE ステートメントまたは DELETE ステートメントの実行結果は、実際に影響を受ける (更新または削除される) 行数です。

例13.5 一括更新ステートメント

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

String hqlUpdate = "update Company set name = :newName where name = :oldName";
int updatedEntities = s.createQuery( hqlUpdate )
        .setString( "newName", newName )
        .setString( "oldName", oldName )
        .executeUpdate();
tx.commit();
session.close();

例13.6 一括削除ステートメント

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

String hqlDelete = "delete Company where name = :oldName";
int deletedEntities = s.createQuery( hqlDelete )
        .setString( "oldName", oldName )
        .executeUpdate();
tx.commit();
session.close();
Query.executeUpdate() メソッドによって返される int 値は、オペレーションの影響を受けた、データベース内のエンティティーの数を示します。
内部では、複数の SQL ステートメントを使用して、DML Update または Delete 更新リクエストまたは削除リクエストに応答して操作を実行する場合があります。これは、テーブルと、更新または削除が必要な結合テーブルの間に存在する関係が原因です。
たとえば、(上記の例のように) delete ステートメントを実行すると、oldName という名前の企業用の Company テーブルだけでなく、結合したテーブルに対しても削除が実行されます。したがって、社員テーブルと双方向の多対多リレーションシップを持つ会社テーブルでは、前述の例の実行が成功すると、対応する結合テーブル Company_Employee から 行が失われることになります。
上記の int deletedEntries 値には、この操作によって影響を受けるすべての行の数 (結合テーブルの行を含む) が含まれます。
INSERT ステートメントの疑似構文は次のとおりです 。INSERTINTOEntityNameproperties_listselect_statement
注記
INSERTINTO..のみSELECT...フォームがサポートされています。INSERTINTO ではありません..。VALUES...フォーム。

例13.7 一括挿入ステートメント

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

String hqlInsert = "insert into Account (id, name) select c.id, c.name from Customer c where ...";
int createdEntities = s.createQuery( hqlInsert )
        .executeUpdate();
tx.commit();
session.close();
SELECT ステートメントを使用して id 属性の値を指定しない場合、基礎となるデータベースが自動生成キーをサポートする限り、識別子が生成されます。この一括挿入操作の戻り値は、データベースで実際に作成されたエントリー数です。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.