ResultSetの方が軽量なのであれば、常にResultSetが良いということになるのか?という点がわかりません。
実行結果を別のクラスに渡すかどうかで判断すればよいと思います。
ResultSetはSQLを実行したクラスでした基本的に型の情報がわからないので、使いづらいです。
戻り値としてResultSetを受け取ったクラスは、MetaDataを確認しないとアクセスできません。
もちろん投げたSQLがわかっていればというのはありますが、たぶんDBへのアクセスするレイヤーと
アプリケーションのレイヤーは異なるため、アプリ側でSQLを意識させることは無いかと思います。
ResultSetを引き回すっていうのは無通信の状態で切断されることもあるのでやめた方がよいです。
※まぁ、ここで悩んでるわけじゃないとは思いますが。
内部で完結するならば、ResultSetで問題ないです。
というか、わざわざEntityに詰め直すのは無駄です。
全件にたいして2重で走査(詰め直しと実処理)することになります。
もちろん懸念しているEntityに全部持つということは、その分のメモリーを消費するというのもあります。
処理時間的なことは気にしていないかもしれませんが
update系のSQLを発行するとか100万回のループを発生させないようにした方が良い気もしますが。
あとはパラレル実行をできるようにテーブル設計、アプリ設計をするとか。
以前、800万件の更新処理があったときは、updateでなくdrop-create&lorderで対応したというケースがあります。
1件単位の処理を大量データにあわせてループさせるっていう考え方自体さけたほうが良いです。
パフォーマンスネックになるのが目に見えてます。