我正在使用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中的數據,但我只是刪除了代碼,因爲它太長了。 –