我的问题是何时使用规范模式,何时使用特定的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
我认为这取决于要处理的数据量。
答案 0 :(得分:1)
如果表格针对相关列及其大小进行了适当的索引,则SQL版本将快速运行,如果它们不同,它将在数据库服务器和应用服务器之间传输较小的数据量。但是,它可能会在CPU和CPU I / O使用方面对SQL框施加更高的负载,并且在许多环境中,DB服务器是最昂贵的扩展组件。
所以是的,这在很大程度上取决于数据的大小。
答案 1 :(得分:0)
我认为一个很好的折衷方案是根据hibernate结合规范模式来生成HQL查询。 (也许Linq for Java ^^?)
答案 2 :(得分:0)
存储库用于从域类中抽象出持久性实现。简而言之,SQL / HQL应该只存在于您的存储库中。
如果您要处理高数据量,请在存储库上创建新方法,然后从规范调用该方法。