0

我的問題是當使用一個規範模式,並且當使用特定的SQL查詢。規格模式VS具體Hibernate查詢

我瞭解,具體的模式需要用具體的規範收集全收集和後置濾波器。但我不明白在特定的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相同/休眠

FROM Car c WHERE c.color = RED AND c.age > 5 

我認爲這取決於數據量處理的。

回答

0

存儲庫用於將持久性實現從您的域類中抽象出來。簡而言之,SQL/HQL應該只存在於你的倉庫中。

如果你正在處理大數據量,您創建一個新的方法,並調用該方法從規格

1

的SQL版本將很快運行所提供的表格被適當地編入索引的問題,其大小的列,如果他們不同它將把數據庫服務器和應用服務器之間的數據更小的體積。然而,就CPU和磁盤I/O使用情況而言,它可能會對SQL框施加更高的負載,並且在許多環境中,數據庫服務器是可以擴展的最昂貴的組件。

所以,是的,它取決於數據的大小很大。

0

我認爲一個好的折衷是規範模式相結合,根據冬眠生成HQL查詢。 (也許Linq for Java ^^?)

+0

也許在光過濾過程中使用規範,例如在ViewModel中。 – Zenithar 2010-01-06 19:46:51