【问题标题】:Convert hibernate query to criteria将休眠查询转换为条件
【发布时间】:2015-11-10 16:09:33
【问题描述】:

如何在条件中转换休眠 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));

我的错误是什么?

【问题讨论】:

    标签: hibernate criteria


    【解决方案1】:

    你只需要一个投影

    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)
    

    【讨论】:

    • @ShiladittyaChakraborty 我认为没有。你用criteria.add(Restrictions.eq("omr_error", 'T')); criteria.add(Restrictions.eq("omr_error", 'U')); 换成in('T','U') 是不正确的。尝试从带有子查询的简单查询开始。
    猜你喜欢
    • 2012-10-18
    • 2019-07-05
    • 1970-01-01
    • 2016-01-03
    • 2023-04-01
    • 2018-12-19
    • 2012-03-09
    • 2011-01-04
    • 2013-08-29
    相关资源
    最近更新 更多