2011-08-15 6 views
1

は、いずれか、次のクエリの基準で私を助けることができる:私はSQLに準拠するための基準は何ですか?

Criteria criteria = session.createCriteria(TableA.class); 
criteria.setFetchMode("TableB", FetchMode.JOIN); 

上記の基準は、両方のテーブルのデータをretrives以下の基準にしようとしています

SELECT * From TableA Inner Join TableB On TableA.ID=TableB.ID 

また、表Aの特定の列のみが必要な場合は、どのように基準が変更されますか?

お時間をいただきありがとうございます。

編集:TableAはTableBと1対多の関係を持っています。

+0

回答がありましたら教えてください。 – Ali

答えて

1

質問には意味がありません。休止状態では、2つのテーブルは実際にはエンティティである必要があります。その場合、それらの間に関係があります。ランダムに2つのテーブルを結合して結果を返そうとしていますか?その場合は、sqlを使用し、ResultTransformerを使用して結果をオブジェクトに変換する必要があります。

private ResultTransformer getResultsTransformer() 
{ 
    ResultTransformer transformer = new AliasToBeanResultTransformer(
      MyResultBean.class) { 
     @Override 
     public Object transformTuple(Object[] values, String[] aliases) 
     { 
      MyResultBean row = new MyResultBean(); 
      for (int i = 0; i < aliases.length; i++) 
      { 
       row.set(aliases[i], values[i]); 
      } 
      return (row); 
     } 
    }; 
    return transformer; 
} 

コールこの次のように:

Query q = session.createSQLQuery(sql); 
    q.setResultTransformer(getResultsTransformer()); 
    List<MyResultBean> list = q.list(); 

UPDATE:表A、表Bで1対多を持っている場合、私はそれが最も簡単なエイリアス

Criteria criteria = getSession().createCriteria(TableA.class); 
criteria.createAlias("tableB","b"); 
criteria.add(Restrictions.eqProperty("id", "b.id"); 
criteria.list(); 
を使用することを見つけるに

こちらがお役に立てば幸いです。よろしくお願いします。

+0

申し訳ありませんが、質問には、TableAからTableBへの1対多関係フォームがあります。 – Ritesh

+0

@Ritesh、回答が更新されました。それはテストされていませんが、あなたがしなければならないことの一般的な考えを与える必要があります。 – Ali

+0

はい、あなたのアプローチは、単にcreateAliasにaddAliasを編集して動作します。しかし、私が使用したのは、Criteria criteria = getSession()。createCriteria(TableAlass).createCriteria( "tableB"); criteria.list();これは私にとってうまくいった。 – Ritesh

0

JOINとすると、tableAである「ルートエンティティ」だけが必要であることをHibernateに示す必要があります。コードに次の文字を追加してください:

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 
関連する問題