【发布时间】:2015-11-07 11:12:24
【问题描述】:
我在 Struts2 中使用休眠。在我只使用带有普通数据库查询(Postgres)的 Struts2 之前。现在我正在尝试用hibernate修改我的数据库结构。但问题是,当我在休眠状态下修改我的代码时,它的工作速度太慢了。
public void evaluation() {
try {
String hql = "from OMRDetailsTable omrDetailsTable where omrDetailsTable.bar_code_no not in(select roll_no from RejectListTable rejectListTable where rejectListTable.rej_status='R') and omrDetailsTable.roll_no not in(select roll_no from RejectListTable rejectListTable where rejectListTable.rej_status='R') and omrDetailsTable.omr_error in('T','U') order by omrDetailsTable.roll_no";
Query query = session.createQuery(hql);
query.setCacheable(false);
query.setReadOnly(true);
List<OMRDetailsTable> result_1 = query.list();
Iterator<OMRDetailsTable> iterator = result_1.iterator();
while(iterator.hasNext()){
omrDetailsTable = (OMRDetailsTable) iterator.next();
set_no = omrDetailsTable.getSet_no().toString();
String queryques = "from SetWiseQuesDetailTable setWiseQuesDetailTable where setWiseQuesDetailTable.set_nm='A' order by setWiseQuesDetailTable.sl_no";
Query query1 = session.createQuery(queryques);
List<String> ansDetailsList = new ArrayList<String>();
ansDetailsList.add(omrDetailsTable.getSl_no());
ansDetailsList.add(omrDetailsTable.getBar_code_no());
ansDetailsList.add(omrDetailsTable.getRoll_no());
ansDetailsList.add(set_no)
List<SetWiseQuesDetailTable> result_2 = query1.list();
for(SetWiseQuesDetailTable setDetails : result_2) {
System.out.println("Inner loop"+setDetails);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
我使用上述函数从数据库中获取数据。我使用了没有休眠的相同方法,它比上面的代码工作得更快。
我的休眠配置文件:
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">org.postgresql.Driver</property>
<property name="connection.url">jdbc:postgresql://localhost:5432/database</property>
<property name="connection.username">postgres</property>
<property name="connection.password">postgres</property>
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<mapping class="com.templateproject.table.LoginTable" />
<mapping class="com.templateproject.table.OMRDetailsTable" />
<mapping class="com.templateproject.table.RejectListTable" />
<mapping class="com.templateproject.table.SetWiseQuesDetailTable" />
</session-factory>
</hibernate-configuration>
工作缓慢的原因是什么?
更多信息:OMRDetailsTable 有 15000 条记录,SetWiseQuesDetailTable 有 300 条记录。意味着它将迭代 4500000 次。
如何在 Hibernate 中转换上述子查询?我是休眠新手。
【问题讨论】:
标签: java hibernate postgresql