仕様パターンと特定の Hibernate クエリ
-
19-09-2019 - |
質問
私の質問は、いつ仕様パターンを使用するのか、またいつ特定の SQL クエリを使用するのかということです。
特定のパターンではコレクション全体を収集し、具体的な仕様を使用してフィルターをポストする必要があることを理解しました。しかし、特定のSQLクエリの前の利点がわかりません。
CarColorSpecification cc = new CarColorSpecification(RED);
CarAgeSpecification ca = new CarAgeSpecification(OLDER, 5);
ISpecification finalSpec = cc.And(ca);
List<Car> res;
List<Car> carColl = service.getCars();
foreach(Car c in carColl) {
if(finalSpec.isSatisfiedBy(c)) {
res.add(c);
}
}
SQL / Hibernateでも同じです
FROM Car c WHERE c.color = RED AND c.age > 5
処理するデータ量にもよると思います。
解決
の リポジトリ は、ドメイン クラスから永続性の実装を抽象化するために使用されます。つまり、SQL/HQL はリポジトリ内にのみ存在する必要があります。
大量のデータを扱う場合は、 リポジトリ そしてそのメソッドをあなたの 仕様.
他のヒント
SQLのバージョンはすぐに実行されますテーブルを提供し、適切に質問し、そのサイズの列のために索引付けされ、それらが異なるなら、それは、DBサーバとアプリケーションサーバ間のデータの小さいボリュームを転送します。それは、しかし、CPUとディスクI / Oの使用量の面でSQLボックス上の高い負荷を課し、そして多くの環境で、DBサーバが拡張するための最も高価な部品であることがあります。
そうです、それはデータのサイズに大きく依存ます。
私は良い妥協はHQLクエリを生成するために休止状態に応じた仕様のパターンを組み合わせることだろうと思います。 (Java用のLINQたぶん^^?)
所属していません StackOverflow