ホームページ >Java >&#&チュートリアル >JPAでネイティブクエリ結果をPOJOに変換するにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。