JPA: Menukar Keputusan Pertanyaan Asli kepada Kelas POJO
Masalah:
Di JPA, apabila melaksanakan pertanyaan asli, hasilnya biasanya dikembalikan sebagai tatasusunan objek atau senarai tatasusunan. Adakah terdapat cara untuk menukar hasil ini secara terus kepada koleksi kelas Java POJO (Objek Java Lama Biasa) yang mempunyai nama lajur yang sama dengan set hasil?
Penyelesaian:
Menggunakan Entiti Dipeta (JPA 2.0 dan ke atas)
JPA 2.0 dan seterusnya membenarkan pemetaan hasil pertanyaan asli kepada POJO yang dipetakan entiti dalam konteks kegigihan. Untuk mencapai ini, anotasi kelas POJO dengan @Entity dan gunakan pertanyaan asli bernama dengan resultClass ditetapkan ke kelas POJO:
@NamedNativeQuery( name = "nativeSQL", query = "SELECT * FROM Actors", resultClass = Actor.class )
Pemetaan Manual
Untuk kes apabila menggunakan entiti yang dipetakan tidak boleh dilaksanakan, pemetaan manual boleh digunakan. Ini melibatkan mencipta kaedah yang mengambil tatasusunan objek (tuple) sebagai input dan memetakannya ke POJO menggunakan pantulan:
public static <T> T map(Class<T> type, Object[] tuple) { // ... (Reflection code omitted for brevity) }
Menggunakan @SqlResultSetMapping (JPA 2.1 dan ke atas)
JPA 2.1 memperkenalkan anotasi @SqlResultSetMapping, yang membenarkan pemetaan tersuai hasil pertanyaan asli kepada POJO. Tentukan pemetaan dalam entiti atau fail orm.xml dan gunakannya dalam pertanyaan asli:
@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");
Menggunakan Pemetaan XML
Daripada menggunakan anotasi , pemetaan set hasil tersuai boleh ditakrifkan dalam fail orm.xml, membenarkan konfigurasi yang lebih terpusat.
<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>
Atas ialah kandungan terperinci Bagaimana untuk Menukar Keputusan Pertanyaan Asli kepada POJO dalam JPA?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!