Im Sinne der mit CriteriaQuery verbundenen Typensicherheit verfügt JPA 2.0 auch über eine API zur Unterstützung der Metamodell- Darstellung von Entitäten.
Ist jemandem eine voll funktionsfähige Implementierung dieser API bekannt (um das Metamodell zu generieren, anstatt die Metamodellklassen manuell zu erstellen)? Es wäre fantastisch, wenn jemand auch die Schritte zum Einrichten in Eclipse kennt (ich nehme an, es ist so einfach wie das Einrichten eines Anmerkungsprozessors, aber Sie wissen es nie).
EDIT: Bin gerade über Hibernate JPA 2 Metamodel Generator gestolpert . Das Problem bleibt jedoch bestehen, da ich keine Download-Links für das Glas finden kann.
EDIT 2: Seit ich diese Frage gestellt habe, ist eine Weile vergangen, aber ich dachte, ich würde zurückkommen und einen Link zum Hibernate JPA Model Generator-Projekt auf SourceForge hinzufügen
Bitte werfen Sie einen Blick auf jpa-Metamodelle-mit-Maven-Beispiel .
Überwintern
org.hibernate.org:hibernate-jpamodelgen
.org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
.Ruhezustand als Abhängigkeit
Ruhezustand als Prozessor
OpenJPA
org.apache.openjpa:openjpa
.org.apache.openjpa.persistence.meta.AnnotationProcessor6
.<openjpa.metamodel>true<openjpa.metamodel>
.OpenJPA als Abhängigkeit
OpenJPA als Prozessor
EclipseLink
org.eclipse.persistence:org.eclipse.persistence.jpa.modelgen.processor
.org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor
.persistence.xml
.EclipseLink als Abhängigkeit
EclipseLink als Prozessor
DataNucleus
org.datanucleus:datanucleus-jpa-query
.org.datanucleus.jpa.query.JPACriteriaProcessor
.DataNucleus als Abhängigkeit
DataNucleus als Prozessor
quelle
something is recommended
ohne zu sagenIMHO
? Ich vertrete nicht im Namen von jemand anderem.persistence.xml
, nicht wahr ?Die JPA 2.0-Unterstützung von Eclipse über Dali (die in "Eclipse IDE für JEE-Entwickler" enthalten ist) verfügt über einen eigenen Metamodellgenerator, der in Eclipse integriert ist.
Dies sollte auf jedem JPA-Anbieter funktionieren, da die generierten Klassen Standard sind.
Siehe auch hier .
quelle
Für Eclipselink ist nur die folgende Abhängigkeit ausreichend, um ein Metamodell zu generieren. Sonst wird nichts benötigt.
quelle
<exclude-unlisted-classes>false</exclude-unlisted-classes>
Geben Sie dies einfach in persisetence.xml anpersistence.xml
Für den Ruhezustand als Anbieter, der meiner Meinung nach am häufigsten vorkommt:
Bei Build-Tools wie Gradle, Maven muss das Jiber 2 Metamodel Generator-Jiber im Klassenpfad und in der Compiler-Ebene> = 1.6 vorhanden sein. Dies ist alles, was Sie zum Erstellen des Projekts benötigen, und das Metamodell wird automatisch generiert.
Bei IDE Eclipse 1. Gehen Sie zu Projekt-> Eigenschaften-> Java-Compiler-> Anmerkungsverarbeitung und aktivieren Sie diese. 2. Erweitern Sie Annotation Processing-> Factory Path-> Add External Jar. Fügen Sie Hibernate JPA 2 Metamodel Generator hinzu. Überprüfen Sie das neu hinzugefügte Jar und sagen Sie OK. Reinigen und bauen fertig!
Link Hibernate JPA 2 Metamodel Generator JAR-Link von Maven Repo https://mvnrepository.com/artifact/org.hibernate/hibernate-jpamodelgen
quelle
<dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-jpamodelgen</artifactId> <scope>compile</scope> </dependency> </dependencies>
zu pom.xml genug.Nehmen wir an , unsere Anwendung verwendet die folgende
Post
,PostComment
,PostDetails
, undTag
Einrichtungen, die eine Eins-zu-viele bilden, eins-zu-eins, und many-to-many - Tabelle Beziehungen :So generieren Sie das Metamodell für JPA-Kriterien
Mit dem
hibernate-jpamodelgen
von Hibernate ORM bereitgestellten Tool können die Projekteinheiten gescannt und das Metamodell für JPA-Kriterien generiert werden. Sie müssen lediglich FolgendesannotationProcessorPath
zurmaven-compiler-plugin
Maven-pom.xml
Konfigurationsdatei hinzufügen :Wenn das Projekt kompiliert wird, können Sie sehen, dass im
target
Ordner die folgenden Java-Klassen generiert werden:Tag-Entität Metamodell
Wenn die
Tag
Entität wie folgt zugeordnet ist:Die
Tag_
Metamodel-Klasse wird folgendermaßen generiert:Das
SingularAttribute
wird für die Basis-id
undname
Tag
JPA-Entitätsattribute verwendet.Post-Entität Metamodell
Die
Post
Entität wird wie folgt zugeordnet:Die
Post
Einheit hat zwei grundlegende Eigenschaften,id
undtitle
, eine Eins-zu-viele -comments
Sammlung, eine Eins-zu-Eins -details
Verbindung und eine Viele-zu-viele -tags
Sammlung.Die
Post_
Metamodel-Klasse wird wie folgt generiert:Die Grundlagen
id
undtitle
Attribute sowie die Eins-zu-Eins-details
Zuordnung werden durch eineSingularAttribute
Weile dargestellt, während die Sammlungencomments
undtags
durch die JPA dargestellt werdenListAttribute
.PostDetails-Entität Metamodell
Die
PostDetails
Entität wird wie folgt zugeordnet:Alle Entitätsattribute werden von der JPA
SingularAttribute
in der zugehörigenPostDetails_
Metamodel-Klasse dargestellt:PostComment-Entität Metamodell
Das
PostComment
ist wie folgt abgebildet:Alle Entitätsattribute werden von der JPA
SingularAttribute
in der zugehörigenPostComments_
Metamodel-Klasse dargestellt:Verwenden des JPA-Kriterien-Metamodells
Ohne das JPA-Metamodell würde eine Kriterien-API-Abfrage, die die nach dem
PostComment
zugehörigenPost
Titel gefilterten Entitäten abrufen muss, folgendermaßen aussehen:Beachten Sie, dass wir
post
beim Erstellen derJoin
Instanz dastitle
String-Literal und beim Verweisen auf das String-Literal verwendet habenPost
title
.Mit dem JPA-Metamodell können wir hartcodierte Entitätsattribute vermeiden, wie im folgenden Beispiel dargestellt:
Angenommen, wir möchten eine DTO-Projektion abrufen, während wir die
Post
title
und diePostDetails
createdOn
Attribute filtern .Wir können das Metamodell beim Erstellen der Join-Attribute sowie beim Erstellen der DTO-Projektionsspalten-Aliase oder beim Verweisen auf die Entitätsattribute verwenden, die gefiltert werden müssen:
Cool, oder?
quelle
Ok, basierend auf dem, was ich hier gelesen habe, habe ich es mit EclipseLink auf diese Weise gemacht und ich musste die Prozessorabhängigkeit nicht nur als
annotationProcessorPath
Element des Compiler-Plugins in das Projekt einfügen.quelle