首先,我是hibernate的新手,所以我不知道如何使用多个标准 .
基本上我有两个标准 .
第一个带有子查询的标准,我正在定义这个标准,如下所示:
DetachedCriteria subCriteria = DetachedCriteria.forClass(RejectListTable.class, "rejectTable");
subCriteria.add(Restrictions.like("rejectTable.rej_status", "R"));
subCriteria.setProjection(Projections.property("rejectTable.roll_no"));
// subCriteria.setProjection(Projections.property("rejectTable.error_type"));
String[] omrErrorsList = { "T", "U" };
Criteria outerCriteria = session.createCriteria(OMRDetailsTable.class, "omrDetails");
outerCriteria.add(Restrictions.in("omrDetails.omr_error", omrErrorsList));
outerCriteria.add(Subqueries.notIn("omrDetails.roll_no", subCriteria));
List outerResults = outerCriteria.list();
第二个标准:
Criteria innerCriteria = session.createCriteria(SetWiseQuesDetailTable.class, "setWiseQuesDetailTable");
innerCriteria.add(Restrictions.like("setWiseQuesDetailTable.set_nm", "A"));
List innerResults = innerCriteria.list();
在第二个标准“setWiseQuesDetailTable.set_nm”中,该值来自第一个标准 . 这意味着第二个标准取决于第一个标准数据 .
现在在第二个标准“setWiseQuesDetailTable.set_nm”中设置静态值“A”,但实际上它来自第一个标准 .
所以我的问题是如何做到这一点?
我试过使用上面这两个标准,这个标准工作缓慢 .
DetachedCriteria subCriteria = DetachedCriteria.forClass(RejectListTable.class, "rejectTable");
subCriteria.add(Restrictions.like("rejectTable.rej_status", "R"));
subCriteria.setProjection(Projections.property("rejectTable.roll_no"));
// subCriteria.setProjection(Projections.property("rejectTable.error_type"));
String[] omrErrorsList = { "T", "U" };
Criteria outerCriteria = session.createCriteria(OMRDetailsTable.class, "omrDetails");
outerCriteria.add(Restrictions.in("omrDetails.omr_error", omrErrorsList));
outerCriteria.add(Subqueries.notIn("omrDetails.roll_no", subCriteria));
outerCriteria.addOrder(Order.asc("omrDetails.bar_code_no"));
List outerResults = outerCriteria.list();
Iterator<OMRDetailsTable> outerIterator = outerResults.iterator();
System.out.println(outerResults.size());
Criteria innerCriteria = session.createCriteria(SetWiseQuesDetailTable.class, "setWiseQuesDetailTable");
while(outerIterator.hasNext()){
System.out.println("Outer Loop"+outerIterator.next().getBar_code_no());
innerCriteria.add(Restrictions.like("setWiseQuesDetailTable.set_nm", "A"));
List innerResults = innerCriteria.list();
Iterator<SetWiseQuesDetailTable> innerIterator = innerResults.iterator();
while(innerIterator.hasNext()) {
System.out.println("Inner loop"+innerIterator.next().getSet_nm());
}
System.out.println("Outer Loop");
}
如何提高性能?