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

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

Patricia Arquette
リリース: 2024-12-14 02:16:10
オリジナル
398 人が閲覧しました

How to Convert Native Query Results to POJO Class Collections in JPA?

JPA でネイティブ クエリ結果を POJO クラス コレクションに変換する方法

JPA を使用する場合、ネイティブ クエリを実行する必要がある場合があります。 JPA 基準クエリを使用して効率的に取得できないデータにアクセスします。ネイティブ クエリの結果が値のコレクションである場合、さらに処理するために各結果オブジェクトを POJO (Plain Old Java Object) クラスに変換する必要がある場合があります。

Mapped を使用したダイレクト キャストEntities

JPA 2.0 以前では、ネイティブ クエリの結果を POJO クラスに直接キャストできませんでした。ただし、JPA 2.1 では @SqlResultSetMapping アノテーションが導入され、ネイティブ クエリ結果を POJO にマッピングできるようになりました。

この機能を使用するには、@SqlResultSetMapping アノテーションをエンティティ クラスで定義し、エンティティ クラスで定義する必要があります。 result とクラスのプロパティに対応する列をマップする必要があります。例:

@SqlResultSetMapping(
        name = "JediResult",
        classes = {
                @ConstructorResult(targetClass = Jedi.class,
                        columns = {@ColumnResult(name = "name"), @ColumnResult(name = "age")})
        }
)
ログイン後にコピー

このアノテーションを配置すると、ネイティブ クエリを実行し、@SqlResultSetMapping アノテーションを使用して POJO クラスへのマッピングを指定できます。

Query query = em.createNativeQuery("SELECT name, age FROM jedi_table", "JediResult");
@SuppressWarnings("unchecked")
List<Jedi> jedis = query.getResultList();
ログイン後にコピー

手動マッピングを使用した間接キャスト

JPA 2.1 の場合は使用できませんが、リフレクションを使用してネイティブ クエリ結果を POJO に手動でマッピングすることは可能です。これには、タプル配列 (ネイティブ クエリによって返される) と POJO クラスを入力として受け取り、リフレクションを使用してタプルの値を使用して POJO クラスのインスタンスを作成するメソッドの作成が含まれます。このメソッドを使用して、各結果を POJO オブジェクトにマップできます。

名前付きネイティブ クエリの使用

ネイティブ クエリ結果を POJO に変換するためのもう 1 つのオプションは、名前付きネイティブ クエリを使用することです。ネイティブクエリ。名前付きネイティブ クエリを使用すると、エンティティ クラスでネイティブ クエリを定義し、クエリの結果クラスを指定できます。この結果クラスは、POJO またはエンティティ クラスになります。名前付きネイティブ クエリを使用すると、リフレクションの使用を回避し、結果を POJO クラスに直接マッピングできます。

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

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