首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >criteria.add与criteria.equals的区别

criteria.add与criteria.equals的区别
EN

Stack Overflow用户
提问于 2013-06-07 08:22:21
回答 3查看 2.5K关注 0票数 0

在hiberante条件下,criteria.equalscriteria.add有什么区别?

举个例子:

返回25条记录

代码语言:javascript
复制
criteria.equals(Restrictions.eq("templateType", TemplateType.DEFAULT_TEMPLATE));

返回2条记录:

代码语言:javascript
复制
criteria.add(Restrictions.eq("templateType", TemplateType.DEFAULT_TEMPLATE)); 

当我执行hibernate.show_sql时,输出是

  • 对于criteria.equals,不生成任何语法
  • 为了criteria.add,this_.template_type=?

注意:使用Hibernate 3。

编辑:

代码语言:javascript
复制
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();
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-07 08:37:39

criteria.addcriteria.equals没有什么可比较的。

criteria.add判据添加到您的标准中,如下所示:

代码语言:javascript
复制
 criteria.add(Restrictions.eq("templateType", TemplateType.DEFAULT_TEMPLATE)); 

这里,Restrictions.eq("templateType", TemplateType.DEFAULT_TEMPLATE)返回一个Criterion对象,该对象被添加到Criteria对象中。

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

代码语言:javascript
复制
 criteria.equals(Restrictions.eq("templateType", TemplateType.DEFAULT_TEMPLATE));

不会对您的Criteria对象做任何操作,但只返回false。您可以通过简单地注释掉criteria.equals代码部分来确定我的声明。

您将看到这一行在生成查询时没有任何效果!

票数 1
EN

Stack Overflow用户

发布于 2013-06-07 08:36:34

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

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

票数 0
EN

Stack Overflow用户

发布于 2013-06-07 08:51:01

在Sazzadur的回答中增加了更多。标准接口由CriteriaImpl和其他扩展对象类的类实现。因此,criteria.equals调用对象类的相等方法。Ad这不是查询生成的一部分,所以您看不到hibernate为您的标准生成的任何查询。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16979411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档