0

hiberante标准中的criteria.addcriteria.equals有什么区别?

只是例子:

返回 25 条记录

criteria.equals(Restrictions.eq("templateType", TemplateType.DEFAULT_TEMPLATE));

返回 2 条记录:

criteria.add(Restrictions.eq("templateType", TemplateType.DEFAULT_TEMPLATE)); 

当我这样做时hibernate.show_sql,输出是

  • for criteria.equals, 没有生成语法
  • 对于criteria.add, this_.template_type=?

注意:使用休眠 3。

编辑:

try{
List<Form> forms=Collections.emptyList();
Criteria normCriteria=session.createCriteria(NormMaster.class);
normCriteria.add(Restrictions.eq("id",normId));
normCriteria.setProjection(Projections.property("libraryId"));
List<Long> libNormIds=normCriteria.list();

if(libNormIds!=null && libNormIds.size()>0)
{
    Criteria criteria=session.createCriteria(Form.class);
    criteria.add(Restrictions.in("normId", libNormIds));
    criteria.equals(Restrictions.eq("templateType", TemplateType.DEFAULT_TEMPLATE));
    //criteria.add(Restrictions.eq("templateType", TemplateType.DEFAULT_TEMPLATE));
    criteria.setFetchMode("formControlMaps", FetchMode.JOIN);
    criteria.setFetchMode("formControlMaps.data", FetchMode.JOIN);
    criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
    forms=criteria.list();
}
return forms;
}
 catch (Exception e) {
     e.printStackTrace();
}
4

3 回答 3

1

没有什么可比criteria.addcriteria.equals

criteria.addCriterion添加到您的Criteria中,如下所示:

 criteria.add(Restrictions.eq("templateType", TemplateType.DEFAULT_TEMPLATE)); 

此处Restrictions.eq("templateType", TemplateType.DEFAULT_TEMPLATE)返回一个Criterion对象,该对象已添加到您的Criteria对象中。

criteria.equals是从Object类继承的方法,用于检查 java 对象的相等性!所以你的代码如下,

 criteria.equals(Restrictions.eq("templateType", TemplateType.DEFAULT_TEMPLATE));

不会对您的Criteria对象做任何事情,而只会返回false. 你可以通过简单地注释掉criteria.equals代码部分来确定我的说法。

你会看到这条线对生成你的查询没有任何影响!

于 2013-06-07T08:37:39.113 回答
0

criteria.equals: 实际上是 object equals 方法,它检查传递的对象是否等于 LHS

criteria.add:将传递的参数添加到条件 where 子句

于 2013-06-07T08:36:34.800 回答
0

为 Sazzadur 的答案添加更多内容。Criteria 接口由 CriteriaImpl 和其他扩展 Object 类的类实现。所以 criteria.equals 调用 Object 类的 equals 方法。广告这不是查询生成的一部分,因此您在 hibernate 为您的条件生成的查询中看不到任何内容。

希望这可以帮助。

于 2013-06-07T08:51:01.230 回答