6

私は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();

person.get(0) がオブジェクトを返しているときに行 firstname と 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ですか?

4

1 に答える 1

8

person.get(0) がオブジェクトを返しているときに行 firstname と albumname を取得するにはどうすればよいですか

SELECT 句に複数のselect_expressionsObject[]を含むクエリは、 (またはListObject[]) を返します。JPA仕様から:

4.8.1 SELECT句の結果型

クエリの SELECT 句で指定されたクエリ結果の型は、エンティティ抽象スキーマ型、状態フィールド型、集約関数の結果、構築操作の結果、またはこれらのシーケンスです。

SELECT 句の結果の型は、そこに含まれるselect_expressionsの結果の型によって定義されます。複数の select_expressionsが SELECT 句で使用されている場合、クエリの結果は typeObject[]であり、この結果の要素は 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 句でデカルト積を使用して内部結合を指定し、WHERE 句で結合条件を指定することは、エンティティ関係に対する明示的な結合を ([LEFT [OUTER] | INNER ] JOIN構文を使用して) 指定するよりも一般的ではないことに注意してください。仕様のセクション4.4.5 結合全体を参照してください。

参考文献

  • JPA 1.0 仕様
    • 4.8.1項「SELECT句の結果型」
    • セクション4.8.2「SELECT句のコンストラクタ式」
    • 4.4.5項「結合」
于 2010-08-25T20:54:38.647 に答える