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

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

DDD
リリース: 2024-12-11 21:36:12
オリジナル
901 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート