右-データベースから1,000,000レコードを削除したい(例)。これには長い時間がかかります->トランザクションがタイムアウトして失敗します。だから-私はそれらをバッチで削除し、トランザクションごとに25000レコードと言います。MySQLのlimit句またはOracleのROWNUMを使用します。これはうまくいきます。
これをデータベースに依存しない方法で実行したいと思います。また、JPA/Hibernateを使用する既存のJavaコードベースから。
運が悪い。JPA Query.setMaxResultsおよびsetFirstResultは、書き込み'クエリ'(削除など)には影響しません。多くのエンティティをメモリに選択して個別に削除するのは非常に遅く、ばかげていると思います。
そのため、ネイティブクエリを使用して、アプリケーションコードの「limit」句を管理します。この句をorm.xmlにカプセル化すると便利ですが、...「HibernateAnnotations 3.2は、ネイティブクエリを使用した一括更新/削除をサポートしていません。」-http ://opensource.atlassian.com/projects/hibernate/browse/ANN-469。
これはよくある問題だと思います。誰かがより良いデータベースに依存しないソリューションを手に入れましたか?