DTOオブジェクトの使用時にN + 1 SELECTSを実行している場所で休止状態に問題があります。例えばDTOオブジェクトを使用したHibernate N + 1の選択
、このJPQLクエリ:
MyDtoのコンストラクタのようなものであるSELECT com.acme.MyDto(t) FROM Thing t
:
SELECT t.id FROM thing t WHERE condition
:ような何かのクエリで結果
public MyDto(Thing t) {
...
}
各行のすべての単一のクエリが続きます。つまり、
SELECT t.id, t.column1, t.column2 FROM thing t WHERE t.id = 1
SELECT t.id, t.column1, t.column2 FROM thing t WHERE t.id = 2
SELECT t.id, t.column1, t.column2 FROM thing t WHERE t.id = 3
...
コンストラクタはつまり、あなたが期待するように動作を休止、その後、エンティティを受け入れるが、その代わりに、個々の列いない場合は:
public MyDto(Integer id, String column1, String column2) {
...
}
その後、生成されたSQLは次のようになります。
SELECT t.id, t.column1, t.column2 FROM thing t WHERE condition
すべての列を取るDTOコンストラクタを作成するのとは別に、最初からすべての列を一度に選択するために休止状態を同軸化する方法はありますか?
私たちが扱っているテーブルには、100個以上の列が埋め込み可能なものにまたがっているので、巨大なコンストラクタを維持するのはかなり面倒です。テーブルは大きく正規化されており、結合はありません。
これはありがとう、それは仕事をします。 –