【发布时间】:2015-04-25 00:40:58
【问题描述】:
此函数是我正在编写的 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;
}
我可以做些什么来让这更简单/更快?
【问题讨论】:
-
"被调用几十万次" -- 一个数据库查询,执行了几十万次?如果除了大幅减少这个数字之外没有太多需要改进的地方,也不会感到惊讶。
-
顺便问一下,您的数据库中有多少种年份和星期的组合? - 如果不是数百万,我认为不是,应该很容易读取一次,例如将它们存储在
HashMap中,然后对这些缓存数据进行操作。 -
大约有 11,000 种组合。在将它们存储在哈希图中并引用它而不是重新查询之后,过去需要两个小时的过程现在需要大约十五分钟。谢谢!
-
很高兴听到这个消息。我将在我的答案中添加方法...
标签: java sql oracle performance hibernate