2013-01-12 8 views
5

私はテーブルA、B、C、D、Eを持っています。
結果から部分的なデータだけが必要です。たとえば、A.nameカラム、D.phoneNumberカラムが必要です。ORMLite - 参加結果の処理方法

私は方法join()を使用しています。

結果をどのように処理する必要がありますか?私は必要なすべてのデータを得るために、すべてのクラスを通過する必要がありますか?はいの場合は、これを行う簡単な方法は何ですか?そのすべてを通過するのは少し複雑です。

私は結果のためだけにクラスを作成し、何らかの形でそれに結果をマップする必要がありますか?

答えて

8

ORMliteのドキュメントによると、外部オブジェクトフィールドを介して接続されたテーブルに対してのみjoinステートメントを使用できます。

私が見ている最初のアプローチは、異物を使用して必要なすべての値を取得することです。あなたは

QueryBuilder<A, Integer> aqb = aDao.queryBuilder(); 
QueryBuilder<B, Integer> bqb = bDao.queryBuilder(); 
List<A> results = aqb.join(bqb).query(); 

for (A a : results){ 
    String name = a.getName(); 
    String phone = a.getB().getPhone(); 
} 

であなたのテーブルAとBを照会した場合、AとBクラスは、このようなものに見えるのに対し、例えば:

.... 
public class A{ 
.... 
    @DatabaseField 
    private String name; 

    @DatabaseField(foreign = true, foreignAutoRefresh = true) 
    private B b; 
....   
    public B getB(){ 
     return b; 
    } 
.... 
    public String getName(){ 
     return name; 
    } 
} 

.... 
public class B{ 
.... 
    @DatabaseField 
    private String phone; 

    public String getPhone(){ 
     return phone; 
    } 
} 

を私はちょうど欲しかった、まさにこのコードは動作しますわからないんだけどそのアイデアを説明する。

私が知っているように、複数のテーブルを同時に照会することはできません。

related ORMLite documentationを参照してください。 結合ステートメントは、バージョン4.42以降のライブラリでサポートされています。

+0

基本的に私はクラスA、B、C、D、Eのすべてを通過する必要があると私は必要なclasessから値を取得する必要がありますか? 「はい」の場合は、カスタムSQLを作成してORMを使用しないほうがよいでしょう。 – Peter

+1

一般的に - はい。 ORMliteは、最も一般的なSQL操作を簡素化する軽量ライブラリです。あなたがやっていることがはるかに簡単にSQL要求を使用するために、カーソルを取得し、それを通過します。 – rus1f1kat0R

+0

ヘルプが十分に公正なもの – Peter

関連する問題