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