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=?

注: 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();
}
4

3 に答える 3

1

criteria.addと比較するものは何もありませんcriteria.equals

criteria.add以下のケースのように、CriterionCriteriaに追加します。

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

ここでは、オブジェクトに追加されRestrictions.eq("templateType", TemplateType.DEFAULT_TEMPLATE)たオブジェクトを返します。CriterionCriteria

criteria.equalsクラスから継承されたメソッドでありObject、Java オブジェクトの等価性をチェックするために使用されます! したがって、コードは次のとおりです。

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

オブジェクトには何もしませんが、 をCriteria返すだけfalseです。criteria.equalsコード部分をコメントアウトするだけで、私の声明を確信することができます。

この行は、クエリの生成に影響を与えないことがわかります!

于 2013-06-07T08:37:39.113 に答える
0

Sazzadur の回答にさらに追加します。Criteria インターフェースは CriteriaImpl などの Object クラスを拡張したクラスによって実装されます。したがって、criteria.equals は Object クラスの equals メソッドを呼び出します。広告これはクエリ生成の一部ではないため、条件に対して休止状態によって生成されたクエリには何も表示されません。

お役に立てれば。

于 2013-06-07T08:51:01.230 に答える
0

criteria.equals: 実際には、渡されたオブジェクトが LHS と等しいかどうかをチェックする object equals メソッドです。

criteria.add: 渡されたパラメーターを条件 where 句に追加します

于 2013-06-07T08:36:34.800 に答える