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 机器施加更高的负载,并且在许多环境中,数据库服务器是扩展成本最高的组件。

所以是的,这在很大程度上取决于数据的大小。

于 2010-01-06T19:28:26.860 回答
0

我认为一个很好的折衷方案是根据休眠结合规范模式来生成 HQL 查询。(也许是用于 Java 的 Linq ^^?)

于 2010-01-06T19:34:52.923 回答
0

Repository用于将持久性实现从您的域类中抽象出来。简而言之,SQL/HQL 应该只存在于您的存储库中。

如果您要处理大量数据,请在您的Repository上创建一个新方法并从您的Specification调用该方法。

于 2010-01-07T13:52:45.170 回答