すべての JPA エンティティを削除するにはどうすればよいですか?のコードを検討して ください。 ここのドキュメントhttp://download.oracle.com/docs/cd/E17410_01/javaee/6/tutorial/doc/gjitv.html では 、クエリのみが説明されています。
2 に答える
Criteria API は DDL 操作用に作成されていないため、Criteria API のドキュメントではクエリのみを説明しています。実際、JPA API全体が実際にはそのために作られているわけではないとさえ言えます。
ちなみに、他の質問のコードは DDL 操作を示していません。JPA 2.0 仕様で説明されている一括DML操作を示しています。
4.10 一括更新および一括削除操作
一括更新および一括削除操作は、単一のエンティティ クラスのエンティティに適用されます (存在する場合は、そのサブクラスと共に)。FROM 句または UPDATE 句で指定できるエンティティ抽象スキーマ タイプは 1 つだけです。
これらの操作の構文は次のとおりです。
update_statement ::= update_clause [where_clause] update_clause ::= UPDATE エンティティー名 [[AS] 識別変数] SET update_item {, update_item}* update_item ::= [識別変数.]{状態フィールド | single_valued_object_field} = new_value 新しい値 ::= スカラー式 | simple_entity_expression | ヌル delete_statement ::= delete_clause [where_clause] delete_clause ::= DELETE FROM entity_name [[AS] 識別変数]WHERE 句の構文は、セクション 4.5 で説明されています。
削除操作は、指定されたクラスとそのサブクラスのエンティティにのみ適用されます。関連するエンティティにはカスケードしません。
更新操作に指定された
new_value
は、それが割り当てられているフィールドと型が互換性がある必要があります。一括更新は、楽観的ロック チェックをバイパスして、データベース更新操作に直接マップします。ポータブル アプリケーションは、必要に応じてバージョン列の値を手動で更新するか、バージョン列の値を手動で検証する必要があります。
パーシスタンス コンテキストは、一括更新または一括削除の結果と同期されません。
データベースとアクティブな永続化コンテキスト内のエンティティとの間に不整合が生じる可能性があるため、一括更新または削除操作を実行する場合は注意が必要です。一般に、一括更新および一括削除操作は、新しい永続化コンテキストのトランザクション内で、またはそのような操作によって状態が影響を受ける可能性があるエンティティをフェッチまたはアクセスする前にのみ実行する必要があります。
例:
DELETE FROM Customer c WHERE c.status = ‘inactive’ DELETE FROM Customer c WHERE c.status = ‘inactive’ AND c.orders IS EMPTY UPDATE customer c SET c.status = ‘outstanding’ WHERE c.balance < 10000
クライテリア API には DDL がないと思います。JPQLでもありません。