我正在使用Hibernate的Struts2。为了从数据库访问数据,我使用了休眠。我用下面的Hibernate配置休眠SQL工作缓慢
<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>
而且我用下面的SQL查询:
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);
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();
try {
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>();
List<SetWiseQuesDetailTable> result_2 = query1.list();
for(SetWiseQuesDetailTable setDetails : result_2) {
System.out.println(setDetails.getQa());
}
catch (Exception e) {
e.printStackTrace();
}
}
这是在这里一类,我映射:
@Entity
@Table(name="reject_list")
public class RejectListTable {
@Column(name="centre_code")
private int centre_code = 0;
@Id
@Column(name="roll_no")
private String roll_no = null;
@Column(name="rej_status")
private String rej_status = null;
@Column(name="error_type")
private String error_type = null;
public int getCentre_code() {
return centre_code;
}
public void setCentre_code(int centre_code) {
this.centre_code = centre_code;
}
public String getRoll_no() {
return roll_no;
}
public void setRoll_no(String roll_no) {
this.roll_no = roll_no;
}
public String getRej_status() {
return rej_status;
}
public void setRej_status(String rej_status) {
this.rej_status = rej_status;
}
public String getError_type() {
return error_type;
}
public void setError_type(String error_type) {
this.error_type = error_type;
}
}
但是,当我执行上面的代码它的工作太慢了。我不知道为什么可能我错过了一些东西,因为我在'HIBERNATE'中很新。当我没有休眠执行上面的代码时,它工作正常。
有关其他信息: OMRDetailsTable
有15000条记录,SetWiseQuesDetailTable
有300条记录。
有什么建议吗?
您能否提供映射类配置以查看您如何使用hibernate映射它们? – dinukadev
您在内部查询中没有使用result_1中的任何内容。那么循环result_1的目的是什么? – user2953113
我使用了result_1中的数据,但我只是删除了代码,因为它太长了。 –