这个函数是我写的一个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