Я работаю над Struts2 с Hibernate. Для доступа к данным из базы данных я использую спящий режим. Я использовал следующие настройки спящего режимаHibernate SQL working slow
<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 записей.
Любое предложение?
Можете ли вы предоставить конфигурацию класса отображения, чтобы увидеть, как вы их сопоставили с помощью спящего режима? – dinukadev
Вы не используете ничего из result_1 во внутреннем запросе. Тогда в чем цель петли result_1? – user2953113
Я использовал данные из результата_1, но я просто удалил код, потому что он был слишком длинным. –