質問

私の質問は、いつ仕様パターンを使用するのか、またいつ特定の 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たぶん^^?)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top