hiberante条件中 criteria.add 和 criteria.equals 有什么区别?
只是示例:
返回25条记录
criteria.equals(Restrictions.eq("templateType", TemplateType.DEFAULT_TEMPLATE));
返回2条记录:
criteria.add(Restrictions.eq("templateType", TemplateType.DEFAULT_TEMPLATE));
当我hibernate.show_sql
时,输出
criteria.equals
,未生成语法criteria.add
,this_.template_type =?注意:使用Hibernate 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();
}
答案 0 :(得分:1)
无法将criteria.add
与criteria.equals
进行比较。
criteria.add
将Criterion添加到您的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
代码部分来确定我的陈述。
您会看到此行在生成查询时无效!
答案 1 :(得分:0)
criteria.equals
:实际上是对象equals方法,它检查传递的对象是否等于LHS
criteria.add
:将传递的参数添加到标准where子句
答案 2 :(得分:0)
为Sazzadur的回答添加更多内容。 Criteria接口由CriteriaImpl和其他扩展Object类的类实现。所以criteria.equals调用Object类的equals方法。广告这不是查询生成的一部分,因此您不会在hibernate为您的条件生成的查询中看到任何内容。
希望这有帮助。