2014-01-16 60 views
0

我正在處理一些繼承的代碼,我不使用實體框架工作。我試圖弄清楚爲什麼以前的程序員按照他們所做的方式編碼,有時會混合和匹配查詢數據的不同方式。JQPL createQuery vs實體對象循環

Deal d = _em.find(Deal.class, dealid); 
List<DealOptions> dos = d.getDealOptions(); 
for(DealOptions o : dos) { 
    if(o.price == "100") { 
     //found the 1 item i wanted 
    } 
} 

然後有時候我看到這一點:

Query q = _em.createQuery("select count(o.id) from DealOptions o where o.price = 100 and o.deal.dealid = :dealid"); 
//set parameters, get results then check result and do whatver 

我明白的代碼兩件做的,我明白,既然有一個大的數據集,第二種方式更爲有效。但是,只給出幾條記錄,是否有任何理由不做查詢,而只是讓實體執行連接並循環遍歷記錄集?

回答

2

一些原因從來沒有使用第一種方法,無論記錄數:

  • 更詳細

  • 意圖還不太清楚,因爲有更多的雜波

  • 性能更差,可能開始降級,與第一個實體

  • 第一種方法的性能會隨着每個增加的實體而降低得比第二種方法要嚴重

  • 這是意想不到的 - 大多數有經驗的開發人員不會這樣做 - 所以需要更多的認知努力讓其他開發人員瞭解。他們會認爲你出於一個令人信服的理由做了這件事,並且會找到這個理由而沒有找到理由。