あなたはそれを正しくやっています-ORMの追加された抽象化はあなたが望む種類の最適化を行うことができないことを意味するので、それはただ遅いです。
とは言うものの、EntityManagerは、それほど大きなトランザクションでは遅くなります。 1つの大きなトランザクションですべてを完全に必要としない場合は、ループを20〜200回繰り返すごとにEMをflush()してからclear()することで、パフォーマンスの高いコードを取得できる可能性があります。
それでも十分なパフォーマンスが得られない場合、私が考えることができる唯一の代替策は、DBMSに対して直接カスタムSQLを実行するカスタムコードに戻すことです。
これは良い答えではないことは知っていますが、少なくともあなたは頭がおかしいわけではないと言えます。
------編集------
バッチ処理
:
また、リモートとローカルを使用すると、パフォーマンスに大きな違いがあります。 各クエリをリモートサーバーに送信するオーバーヘッドとしてのデータベースは非常に大きいです。トランザクションとDBの最適化により、ローカルデータベースを使用する際のオーバーヘッドが大幅に削減されます。 (たとえば、質問の例の場合、70秒は300ミリ秒に短縮されます)