【问题标题】:Question about Criteria.createCriteria in Hibernate API关于 Hibernate API 中 Criteria.createCriteria 的问题
【发布时间】:2011-09-21 09:20:32
【问题描述】:

所以我仍在努力让自己熟悉 Hibernate Criteria API,并且我有这段 Java 代码,我想寻求澄清。

Criteria c = super.getSession().createCriteria(PpNnCtDetail.class);
c.add(Restrictions.between("commencementDate", fromDate, toDate);

这部分我了解正在发生的事情 - 用 SQL 来表示它会是这样的 - 如果我错了,请纠正我,

SELECT * FROM PpNnCtDetail WHERE commencementDate >= fromDate AND commencementDate <= toDate;

问题出在上面两行代码之后。

c = c.createCriteria("nnContractTbl");
c.createCriteria("progCategory").add(Restrictions.in("progCategoryId", allProgCat));
c.createCriteria("acadOrgTbl");
c.createCriteria("serviceType");
c.createCriteria("campusTbl");
return c.list();

第一行试图完成什么?重新分配给 c 是多余的吗?

事实上,c.createCriteria 试图实现的行是什么?等效的 SQL 查询会是什么样子?更重要的是,c.list() 会返回什么?

【问题讨论】:

    标签: java sql hibernate criteria


    【解决方案1】:

    c = c.createCriteria("nnContractTbl"); 上的赋值是多余的,createCriteria 和几乎所有Criteria 方法都会修改它们被调用的实例,并返回实例本身以进行方法链接。所以你可以像这样链接调用:

    return super.getSession().createCriteria(PpNnCtDetail.class)
        .add(Restrictions.between("commencementDate", fromDate, toDate)
        .createCriteria("nnContractTbl")
        .createCriteria("progCategory").add(Restrictions.in("progCategoryId", allProgCat))
        .createCriteria("acadOrgTbl")
        .createCriteria("serviceType")
        .createCriteria("campusTbl")
        .list();
    

    关于该序列的结果,Criteria.createCriteria(association) 将导致条件中已有的数据与属性association 建模的关联中设计的表之间的内连接。它还将在关联实体处“根”(正如它们在 Javadocs 中声明的那样)Criteria,因此在进一步调用 createCriteria(association) 时,association 指的是在最后一个“根”实体上声明的关联属性。

    这是Criteria.createCriteria(association, joinType)joinType CriteriaSpecification.INNER_JOIN 的简写。

    【讨论】:

      【解决方案2】:

      上面指定的那些 createCriteria 基本上等同于对传递的实体的 INNER JOIN。

      找到问题答案的最佳方法(同时学习休眠)是在休眠配置文件中turn SQL logging on,并检查生成的 SQL。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-23
        • 1970-01-01
        相关资源
        最近更新 更多