在hiberante条件下,criteria.equals与criteria.add有什么区别?
举个例子:
返回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();
}发布于 2013-06-07 08:37:39
criteria.add和criteria.equals没有什么可比较的。
criteria.add将判据添加到您的标准中,如下所示:
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-07 08:36:34
criteria.equals:实际上是object等于方法,它检查传递的对象是否等于LHS
criteria.add:将传递的参数添加到子句
发布于 2013-06-07 08:51:01
在Sazzadur的回答中增加了更多。标准接口由CriteriaImpl和其他扩展对象类的类实现。因此,criteria.equals调用对象类的相等方法。Ad这不是查询生成的一部分,所以您看不到hibernate为您的标准生成的任何查询。
希望这能有所帮助。
https://stackoverflow.com/questions/16979411
复制相似问题