0

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

処理するデータ量にもよると思います。

4

3 に答える 3

1

SQLバージョンは、問題の列とそのサイズに対してテーブルに適切なインデックスが付けられていればすぐに実行され、DBサーバーとアプリサーバーが異なる場合は、少量のデータを転送します。ただし、CPUとディスクI / Oの使用量に関して、SQLボックスに高い負荷がかかる可能性があり、多くの環境では、DBサーバーは拡張するのに最も高価なコンポーネントです。

そうです、それはデータのサイズに大きく依存します。

于 2010-01-06T19:28:26.860 に答える
0

hibernate による仕様パターンを組み合わせて HQL クエリを生成するのが良い妥協点だと思います。(多分Linq for Java ^^ ?)

于 2010-01-06T19:34:52.923 に答える
0

リポジトリは、永続化の実装をドメイン クラスから抽象化するために使用されます。つまり、SQL/HQL はリポジトリ内にのみ存在する必要があります。

大量のデータを扱っている場合は、リポジトリに新しいメソッドを作成し、そのメソッドをSpecificationから呼び出します。

于 2010-01-07T13:52:45.170 に答える