Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

13.4.3. INSERT ステートメントについて

HQL は、INSERT ステートメントを定義する機能を追加します。これと同等の JPQL はありません。HQLINSERT ステートメントの BNF は次のとおりです。
insert_statement ::= insert_clause select_statement

insert_clause ::= INSERT INTO entity_name (attribute_list)

attribute_list ::= state_field[, state_field ]*
tribute_list は、SQL INSERT ステートメントの column specification に似ています。マッピングされた継承に関連するエンティティーでは、名前付きエンティティーに直接定義された属性のみが attribute_list で使用できます。スーパークラスプロパティーは許可されておらず、サブクラスプロパティーは意味を成しません。つまり、INSERT ステートメントは本質的にはポリモーフィックではありません。
警告
select_statement には、有効な HQL 選択クエリーを使用できます。この場合、戻り値のタイプは挿入で想定されるタイプと一致する必要があります。現在、これは、チェックによるデータベースへの再参照を許可するのではなく、クエリーのコンパイル時に確認されます。これにより、equal ではなく equivalent である Hibernate タイプ間で問題が発生する可能性があります。たとえば、これは org.hibernate.type.DateType としてマップされた属性と org.hibernate.type.TimestampType として定義された属性の間でミスマッチの問題を引き起こす可能性があります。
id 属性には、insert ステートメントに 2 つのオプションを付与します。attribute_listid プロパティーを明示的に指定することができます。この場合、その値は、対応する select 式から取得されるか、または生成された値が使用される場合は attribute_list から省略されます。後者のオプションは、データベースで (in the database) で動作する ID ジェネレーターを使用している場合にのみ利用できます。メモリー内 (in memory) タイプジェネレーターでこのオプションを使用しようとすると、解析中に例外が発生します。
ロック属性の場合、insert ステートメントでは、以下のいずれかのオプションが再度提供されます。attribute_list に属性を指定できます。この場合、その値は対応する select 式から取得されます。あるいは、attribute_list から除外できます。その場合は、対応する select 式によって定義される seed value が使用されます。 org.hibernate.type.VersionType 使用されている。

例13.3 INSERT クエリーステートメント

String hqlInsert = "insert into DelinquentAccount (id, name) select c.id, c.name from Customer c where ...";
int createdEntities = s.createQuery( hqlInsert ).executeUpdate();