2012-04-16 12 views
0

おはよう。私はこの質問に全力で取り組んできました。JPA JPN外国為替取引の結果を返すにはどうすればいいですか

他のテーブルへの外部キーを持つテーブルがあり、両方のテーブルの結果が必要な場合は、基本SQLを使用して外部キーの内部結合を行い、要求したすべての情報を取得します。外部キーにJPAエンティティを生成すると、外部キー列に対して@oneTooneアノテーション、@oneToMany、@ManyToMany、@ManyToOneなどが取得されます。私は@oneToManyを外部キーと対応する@ManyToOneに関連するテーブルの列のプライマリキーを持っている私も正しい列の@joinedONアノテーションを持って...私はまた、最初からすべてを選択する基本的な名前付きクエリがあります表。私は基本的なSQLで行う必要があるように、両方のテーブルから情報を取得するために結合を行う必要がありますか?あるいは、私はそれらの注釈を私のためにそれらの記録を取り戻すという事実はありますか?私は外部キー関係に基づいて、表Bに関連しているテーブルAを持っていると私は両方のテーブルのレコードは、私は、外部キーまたは

Select * From A inner Join B on A.column2 = B.column1 

またはその他に基づいてBに、表Aに参加するだろうしたい場合は明確にするために、いくつかのような非感覚(Pardon私のSQLは、それが正確ではないが、あなたが考えを得る場合)... そのクエリは、それらの2つの選択された列のどこからAとBのすべての列を選択していたでしょう... ここに私です私が使用していますという名前のクエリ....

@NamedQuery(name="getQuickLaunch", query = "SELECT q FROM QuickLaunch q") 

これは私が私のステートレスセッションBeanでこれを呼び出しています方法です...

try 
    { 
     System.out.println("testing 1..2..3"); 
     listQL = emf.createNamedQuery("getQuickLaunch").getResultList(); 
     System.out.println("What is the size of this list: number "+listQL.size()); 
     qLaunchArr = listQL.toArray(new QuickLaunch[listQL.size()]);    

    } 

この呼び出しはテーブルAのすべてのカラムを返しますが、テーブルBのカラムはありません。私の最初の本能は、2つのテーブルを結合するようにクエリを変更することです...しかし、とにかく別の場所に書かれているのと同じクエリを書いているのであれば、JPAの使用のポイントは何だと思いますか?さらに、私は単純なものを見落としたくない。では、オーバーフロー愛好家を積み重ねるとは何でしょうか? JPAを使用して結合クエリのすべてのデータを取得するにはどうすればよいですか?

答えて

1

ContactエンティティへのOneToManyアソシエーションを持つPersonエンティティがあるとします。

あなたがするEntityManagerから人を取得すると、連絡先のコレクション上の任意のメソッドを呼び出すと、遅延し、その人の連絡先のリストをロードします。

person.getContacts().size(); 
// triggers a query select * from contact c where c.personId = ? 

ロードする単一のクエリを使用したい場合人とそのすべての連絡先は、SQLクエリでfetchが必要になります。

select p from Person p 
left join fetch p.contacts 
where ... 

また、協会自体がとして熱心にロードされ、@OneToMany(lazy = false)を使用してマークすることができますが、その後の人がロードされるたびに(em.find()またはいずれかを競いますqその連絡先も読み込まれます。

+0

これは、名前付きクエリのフェッチになりますか? – SoftwareSavant

+0

クエリの名前が変更されても、何も変更されません。 JPQLはJPQLです。名前付き問合せでフェッチを実行する場合は、名前付き問合せに結合フェッチを追加します。 –

+0

私はどこに必ず必要ですか?必要なID結合列を指定する必要がありますか?今まで私が見たすべての例は少し漠然としています – SoftwareSavant

関連する問題