0

私はJPQLSELECTのこの例をList<Object[]>見ています、そしてそれはあなたが:を返すことができると言います

TypedQuery<Object[]> query = em.createQuery(
    "SELECT c.name, c.capital.name FROM Country AS c", Object[].class);
List<Object[]> results = query.getResultList();
for (Object[] result : results) {
    System.out.println("Country: " + result[0] + ", Capital: " +     result[1]);
}

今私はこれのためにこれをやっています:

管理対象エンティティオブジェクトの構築にはある程度のオーバーヘッドがあるため、上記の2つのクエリのように、非エンティティオブジェクトを返すクエリの方が通常は効率的です。このようなクエリは、主に情報を効率的に表示するために役立ちます。管理対象エンティティオブジェクトが必要なエンティティオブジェクトを更新または削除する操作では、生産性が低下します。

これで、エンティティCountryのエンティティCapitalがNULLになる可能性があることを除いて、同様のエンティティがあります。を取得したい場合List<Object[]>、Capitalからプロパティ名にアクセスできないため(CapitalはNULLになる可能性があると述べたように)、正しく機能しません。CapitalがNULLの場合、Object[]にはそのプロパティのNULL値が含まれている必要があります。

4

1 に答える 1

0

CASE ステートメントを使用できます。

"SELECT c.name, CASE WHEN (c.capital IS NULL) THEN NULL ELSE c.capital.name END FROM Country AS c"
于 2012-08-17T08:04:32.600 に答える