hibernateのN+1問題について

hibernateを業務で使うことになりました。


やっほう!!


なんて思っていたら、早速N+1問題にぶつかった。


テーブルを結合してとってきて欲しいので、リレーションをアノテーションで記述してみたよ。


でも、流れているSQLは、一テーブル毎に検索するSQLだった。一生懸命、親レコード一つに付き、子レコードを検索するSQLを発行していたよ。


じゃあってんで、fetchを追加したら、検索結果の件数が子レコードの総数になったよ。


そうじゃないんだ。欲しいのは親レコード-子レコードの結果なんだ。だから検索結果の件数として欲しいのは、親レコードの件数なんだ。親レコードから処理を始めたいんだ。


mappingの戦略(?)といったものが指定できるんであれば、そうしたい。


そうじゃなかったら、hibernate使うよりJDBCを生で使った方が良いような気がしてきた。