這個函數是我寫的一個Hibernate程序,用於爲大學金融系統做一些後端批量處理。程序執行時會被調用數十萬次,這些調用是程序中最大的單次調用。目前我想不出一種合理的方式來減少它的使用次數。這種Hibernate方法效率很低嗎?
此函數以財政年度支付期(「fypper」)和該期間的一週爲參數,並返回一個構造(「AidYearTerm」),該構造存儲支付週期所在的年份,學期和期限英寸
public AidYearTerm FypperTermInfo (String fypper, String week) {
sfa_fws_calendar aidYear = new sfa_fws_calendar();
TypedQuery<sfa_fws_calendar> query = manager.createQuery("FROM sfa_fws_calendar cal "
+ "WHERE cal.id.fypper = ?1 AND cal.id.week_num = ?2",sfa_fws_calendar.class);
query.setParameter(1, fypper);
query.setParameter(2, week);
List<sfa_fws_calendar> aidYearList = query.getResultList();
if(!aidYearList.isEmpty()) {
aidYear = query.getSingleResult();
}
else {
aidYear.setFWS_AID_YR("9999");
aidYear.setSEM("NOTSET");
aidYear.setTERM("NOTSET");
ErrorOut("Could not find term info for "+fypper);
}
DebugOut("found aid year "+aidYear.getFWS_AID_YR()+", term "+aidYear.getTERM());
AidYearTerm aidYearTerm = new AidYearTerm(aidYear.getFWS_AID_YR(),aidYear.getTERM(),aidYear.getSEM());
return aidYearTerm;
}
有什麼我可以做,使這更簡單/更快?
「被調用幾十萬次」 - 數據庫查詢,執行數十萬次?如果除了極大地減少這個數字之外沒有太多的改進,我們不會感到驚訝。 – JimmyB 2015-02-23 16:16:40
順便說一下,數據庫中有多少年和幾周的組合? - 如果它不是數百萬,我認爲它不是,它應該很容易讀取一次,例如存儲在一個'HashMap'中,然後操作這個緩存的數據。 – JimmyB 2015-02-23 16:21:32
約有11,000種組合。在將它們存儲在散列表中並參考它而不是重新查詢之後,過去需要兩個小時的過程現在大約需要十五分鐘。謝謝! – 2015-02-23 18:42:06