2015-11-10 86 views
1

如何休眠sql查詢轉換成標準:轉換Hibernate查詢到標準

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

是我的標準嗎? –

+0

@ShiladittyaChakraborty我認爲沒有。你使用'criteria.add(Restrictions.eq(「omr_error」,'T')); criteria.add(Restrictions.eq(「omr_error」,'U'));'for'in('T','U')'這是不正確的。試着從一個簡單的子查詢查詢開始。 –