2015-11-10 5 views
1

Как преобразовать гибернации 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"; 

Я попытался преобразовать его, но он бросает это исключение: could not resolve property: parent of: com.templateproject.table.OMRDetailsTable

DetachedCriteria subCriteria =  DetachedCriteria.forClass(RejectListTable.class); 
    subCriteria.add(Restrictions.eq("rej_status", 'R')); 
    subCriteria.setProjection(Projections.property("roll_no")); 
    subCriteria.setProjection(Projections.property("error_type")); 

    Criteria criteria = session.createCriteria(OMRDetailsTable.class); 
    criteria.add(Restrictions.eq("omr_error", 'T')); 
    criteria.add(Restrictions.eq("omr_error", 'U')); 
    criteria.add(Subqueries.propertyEq("parent", subCriteria)); 

Что моя ошибка?

ответ

0

Вам нужно только одна проекция

DetachedCriteria subCriteria = DetachedCriteria.forClass(RejectListTable.class); 
subCriteria.add(Restrictions.eq("rej_status", 'R')); 
subCriteria.setProjection(Projections.property("roll_no")); 

И, пожалуйста, используйте Subqueries.notIn() с roll_no (не parent)

Subqueries.notIn("roll_no", subCriteria) 
+0

Is мои критерии не так ли? –

+0

@ShiladittyaChakraborty Я думаю, нет. Вы используете 'criteria.add (Restrictions.eq (" omr_error ", 'T')); criteria.add (Restrictions.eq ("omr_error", 'U')); 'for' in ('T', 'U') 'Это неверно. Попробуйте начать с простого запроса с подзапроса. –

Смежные вопросы