JPQLを使用して2つのテーブルから選択します
質問
私は使用しています JPQL
データを取得します。ステートメントを使用してデータを取得できます
List persons = null;
persons = em.createQuery("select p.albumName from PhotoAlbum p , Roleuser r
where r = p.userId and r.userID = 1");
これを使用してアルバム名を取得できます。
int i=0;
for (i=0;i<persons.size(); i++)
{
System.out.println("Testing n "+ i +" " + persons.get(0));
}
今、私はアルバム名とロールカーズの行の名前を取得したい firstname
クエリを使用しています
persons = em.createQuery("select r.firstName , p.albumName from PhotoAlbum p ,
Roleuser r where r = p.userId and r.userID = 1").getResultList();
ここで、sirstNameとalbumnameをpersons.get(0)として列とalbumnameを取得するにはどうすればよいですか
コードを実行することで:
for (i=0;i<persons.size(); i++)
{
//r = (Roleuser) persons.get(i);
System.out.println("Testing n "+ i +" " + persons.get(i));
}
私はこれを手に入れています:
Testing n 0 [Ljava.lang.Object;@4edb4077
INFO: Testing n 1 [Ljava.lang.Object;@1c656d13
INFO: Testing n 2 [Ljava.lang.Object;@46dc08f5
INFO: Testing n 3 [Ljava.lang.Object;@654c0a43
どのようにマッピングできますか persons.get(0)
そして、取得します firstname
と albumname
?
解決
さて、whens firstNameとalbumnameをpersons.get(0)として取得するにはどうすればよいですか?
複数のクエリ select_expressions Select句では、anを返します Object[]
(またはa List
の Object[]
)。 JPA仕様から:
4.8.1 select句の結果タイプ
クエリの選択節で指定されたクエリ結果のタイプは、エンティティ抽象スキーマタイプ、ステートフィールドタイプ、集計関数の結果、構造操作の結果、またはこれらのシーケンスです。
SELECT句の結果タイプは、の結果タイプによって定義されます select_expressions その中に含まれています。複数の場合 select_expressions Select句で使用されていますが、クエリの結果はタイプです
Object[]
, 、およびこの結果の要素は、SELECT句の仕様の順序に対応し、それぞれの結果タイプのタイプに対応します select_expressions.
だからあなたの場合、あなたはおそらくこのようなものが欲しい:
for (i=0;i<persons.size(); i++) {
//r = (Roleuser) persons.get(i);
System.out.println("Testing n " + i + " " + persons.get(i)[0] + ", " +
persons.get(i)[1]);
}
From句でデカルト製品を使用して内側の結合を指定し、句の結合条件は、エンティティ関係を明示的に結合するよりも典型的ではないことに注意してください( [LEFT [OUTER] | INNER ] JOIN
構文)。セクション全体を参照してください 4.4.5参加 仕様で。
参照
- JPA 1.0仕様
- セクション4.8.1「SELECT句の結果タイプ」
- セクション4.8.2「選択節のコンストラクター式」
- セクション4.4.5「結合」