Dalam semangat keamanan tipe yang terkait dengan CriteriaQuery JPA 2.0 juga memiliki API untuk mendukung representasi Metamodel entitas.
Adakah yang mengetahui implementasi yang berfungsi penuh dari API ini (untuk menghasilkan Metamodel daripada membuat kelas metamodel secara manual)? Akan luar biasa jika seseorang juga mengetahui langkah-langkah untuk menyiapkannya di Eclipse (Saya menganggap ini sesederhana menyiapkan pemroses anotasi, tetapi Anda tidak pernah tahu).
EDIT: Baru saja menemukan Hibernate JPA 2 Metamodel Generator . Tetapi masalahnya tetap ada karena saya tidak dapat menemukan tautan unduhan apa pun untuk jar.
EDIT 2: Beberapa saat telah berlalu sejak saya mengajukan pertanyaan ini, tetapi saya pikir saya akan kembali dan menambahkan tautan ke proyek Hibernate JPA Model Generator di SourceForge
Silakan lihat jpa-metamodels-with-maven-example .
Hibernasi
org.hibernate.org:hibernate-jpamodelgen
.org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
.Hibernasi sebagai ketergantungan
Hibernasi sebagai prosesor
OpenJPA
org.apache.openjpa:openjpa
.org.apache.openjpa.persistence.meta.AnnotationProcessor6
.<openjpa.metamodel>true<openjpa.metamodel>
.OpenJPA sebagai dependensi
OpenJPA sebagai prosesor
EclipseLink
org.eclipse.persistence:org.eclipse.persistence.jpa.modelgen.processor
.org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor
.persistence.xml
.EclipseLink sebagai dependensi
EclipseLink sebagai prosesor
DataNucleus
org.datanucleus:datanucleus-jpa-query
.org.datanucleus.jpa.query.JPACriteriaProcessor
.DataNucleus sebagai ketergantungan
DataNucleus sebagai prosesor
sumber
something is recommended
tanpaIMHO
? Saya tidak mewakili atas nama orang lain.persistence.xml
, bukan?Dukungan JPA 2.0 Eclipse melalui Dali (yang termasuk dalam "Eclipse IDE for JEE Developers") memiliki generator metamodel sendiri yang terintegrasi dengan Eclipse.
Ini harus berfungsi pada penyedia JPA mana pun karena kelas yang dihasilkan adalah standar.
Lihat juga di sini .
sumber
Untuk eclipselink, hanya ketergantungan berikut ini yang cukup untuk menghasilkan metamodel. Tidak ada lagi yang dibutuhkan.
sumber
<exclude-unlisted-classes>false</exclude-unlisted-classes>
di persisten.xmlpersistence.xml
Untuk Hibernate sebagai provider yang paling umum IMHO:
Untuk fitur build seperti Gradle, Maven, Anda harus memiliki jar Hibernate JPA 2 Metamodel Generator di classpath dan level compiler> = 1.6 hanya itu yang Anda butuhkan untuk membangun proyek dan metamodel akan dibuat secara otomatis.
Untuk IDE Eclipse 1. goto Project-> Properties-> Java Compiler-> Annotation Processing dan aktifkan. 2. Perluas Annotation Processing-> Factory Path-> Add External Jar tambahkan Hibernate JPA 2 Metamodel Generator jar, periksa jar yang baru ditambahkan dan katakan OK. Bersihkan dan Bangun selesai!
Link Hibernate JPA 2 Metamodel Generator jar link dari maven repo https://mvnrepository.com/artifact/org.hibernate/hibernate-jpamodelgen
sumber
<dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-jpamodelgen</artifactId> <scope>compile</scope> </dependency> </dependencies>
ke pom.xml sudah cukup.Mari kita asumsikan aplikasi kita menggunakan berikut
Post
,PostComment
,PostDetails
, danTag
entitas, yang membentuk satu-ke-banyak, satu-ke-satu, dan banyak-ke-banyak hubungan tabel :Cara membuat Metamodel Kriteria JPA
The
hibernate-jpamodelgen
alat yang disediakan oleh Hibernate ORM dapat digunakan untuk memindai entitas proyek dan menghasilkan Kriteria JPA Metamodel. Yang perlu Anda lakukan adalah menambahkan yang berikut iniannotationProcessorPath
kemaven-compiler-plugin
dalampom.xml
file konfigurasi Maven :Sekarang, saat proyek dikompilasi, Anda dapat melihat bahwa di
target
folder, kelas Java berikut dibuat:Metamodel entitas tag
Jika
Tag
entitas dipetakan sebagai berikut:Kelas
Tag_
Metamodel dibuat seperti ini:The
SingularAttribute
digunakan untuk dasarid
danname
Tag
atribut entitas JPA.Posting entitas Metamodel
The
Post
entitas dipetakan seperti ini:The
Post
entitas memiliki dua atribut dasar,id
dantitle
, satu-ke-banyakcomments
koleksi, satu-ke-satudetails
asosiasi, dan banyak-ke-banyaktags
koleksi.Kelas
Post_
Metamodel dibuat sebagai berikut:Atribut dasar
id
dantitle
, sertadetails
asosiasi satu-ke-satu , diwakili olehSingularAttribute
sementara koleksicomments
dantags
diwakili oleh JPAListAttribute
.Entitas PostDetails Metamodel
The
PostDetails
entitas dipetakan seperti ini:Semua atribut entitas akan diwakili oleh JPA
SingularAttribute
diPostDetails_
kelas Metamodel terkait :Metamodel entitas PostComment
The
PostComment
dipetakan sebagai berikut:Dan, semua atribut entitas diwakili oleh JPA
SingularAttribute
diPostComments_
kelas Metamodel terkait :Menggunakan Metamodel Kriteria JPA
Tanpa Metamodel JPA, kueri API Kriteria yang perlu mengambil
PostComment
entitas yang difilter menurutPost
judul terkait akan terlihat seperti ini:Perhatikan bahwa kami menggunakan
post
literal String saat membuatJoin
instance, dan kami menggunakantitle
literal String saat mereferensikan filePost
title
.Metamodel JPA memungkinkan kita untuk menghindari atribut entitas pengkodean keras, seperti yang diilustrasikan oleh contoh berikut:
Atau, katakanlah kita ingin mengambil sebuah proyeksi DTO sementara menyaring
Post
title
danPostDetails
createdOn
atribut.Kita dapat menggunakan Metamodel saat membuat atribut gabungan, serta saat membangun alias kolom proyeksi DTO atau saat mereferensikan atribut entitas yang perlu kita filter:
Keren kan?
sumber
Ok, berdasarkan apa yang telah saya baca di sini, saya melakukannya dengan EclipseLink dengan cara ini dan saya tidak perlu menempatkan ketergantungan prosesor pada proyek, hanya sebagai
annotationProcessorPath
elemen plugin compiler.sumber