执行多个hibernate依赖项标准

时间:2015-11-11 12:40:48

标签: hibernate hibernate-criteria

首先,我是一个非常新的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"该值来自第1个标准。这意味着第二个标准取决于第一个标准数据。

目前正处于第二个标准" 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");
  }

如何改善表现?

0 个答案:

没有答案