ホームページ >Java >&#&チュートリアル >JPAでネイティブクエリ結果をPOJOに変換するにはどうすればよいですか?

JPAでネイティブクエリ結果をPOJOに変換するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-11 21:36:12782ブラウズ

How to Convert Native Query Results to POJOs in JPA?

JPA: ネイティブ クエリ結果を POJO クラスに変換する

問題:

JPA では、ネイティブ クエリを実行すると、結果は通常、オブジェクト配列またはリストとして返されます。配列。この結果を、結果セットと同じ列名を持つ Java POJO (Plain Old Java Objects) クラスのコレクションに直接変換する方法はありますか?

解決策:

マップされたエンティティの使用 (JPA 2.0 および上)

JPA 2.0 以降では、永続コンテキストでマップされたエンティティである POJO にネイティブ クエリ結果をマッピングできます。これを実現するには、POJO クラスに @Entity アノテーションを付け、resultClass を POJO クラスに設定した名前付きネイティブ クエリを使用します。

@NamedNativeQuery(
    name = "nativeSQL",
    query = "SELECT * FROM Actors",
    resultClass = Actor.class
)

Manual Mapping

ケースの場合マップされたエンティティを使用できない場合は、手動マッピングを使用できます。これには、オブジェクトの配列 (タプル) を入力として受け取り、それをリフレクションを使用して POJO にマップするメソッドの作成が含まれます。

public static <T> T map(Class<T> type, Object[] tuple) {
    // ... (Reflection code omitted for brevity)
}

@SqlResultSetMapping の使用 (JPA 2.1 以降)

JPA 2.1 では @SqlResultSetMapping アノテーションが導入され、カスタム マッピングが可能になります。ネイティブ クエリ結果を POJO に変換します。エンティティまたは orm.xml ファイルでマッピングを定義し、それをネイティブ クエリで使用します。

@SqlResultSetMapping(
    name = "JediResult",
    classes = {
        @ConstructorResult(
            targetClass = Jedi.class,
            columns = {
                @ColumnResult(name = "name"),
                @ColumnResult(name = "age")
            }
        )
    }
)
Query query = em.createNativeQuery("SELECT name,age FROM jedis_table", "JediResult");

注釈を使用する代わりに XML マッピングを使用する

、カスタム結果セット マッピングを orm.xml ファイルで定義できるため、より一元化されたマッピングが可能になります。構成。

<sql-result-set-mapping name="JediMapping">
    <constructor-result target-class="org.answer.model.Jedi">
        <column name="name" class="java.lang.String"/>
        <column name="age" class="java.lang.Integer"/>
    </constructor-result>
</sql-result-set-mapping>

以上がJPAでネイティブクエリ結果をPOJOに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。