Como gerar metamodelo JPA 2.0?
-
27-09-2019 - |
Pergunta
No espírito de segurança do tipo associado ao Critério O JPA 2.0 também tem uma API para apoiar Metamodelo representação de entidades.
Alguém está ciente de uma implementação totalmente funcional desta API (para gerar o metamodelo em vez de criar as classes de metamodelo manualmente)? Seria incrível se alguém também soubesse as etapas para configurar isso no Eclipse (presumo que seja tão simples quanto configurar um processador de anotação, mas você nunca sabe).
Editar: Acabei de tropeçar Hibernate JPA 2 Metamodel Generator . Mas o problema permanece, pois não consigo encontrar links para download para o frasco.
Edit 2: há algum tempo passou desde que fiz essa pergunta, mas pensei em voltar e adicionar um link para o Hibernate JPA Model Gerator Project no SourceForge
Solução
Seria incrível se alguém também soubesse as etapas para configurar isso no Eclipse (presumo que seja tão simples quanto configurar um processador de anotação, mas você nunca sabe)
É sim. Aqui estão as implementações e instruções para as várias implementações do JPA 2.0:
Eclipselink
Hibernate
org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
- http://in.relation.to/2009/11/09/hibernate-static-metamodel-generator-annotation-processor
OpenJpa
org.apache.openjpa.persistence.meta.AnnotationProcessor6
- http://openjpa.apache.org/builds/2.4.1/apache-openjpa/docs/ch13s04.html
DataNucleus
org.datanucleus.jpa.JPACriteriaProcessor
- http://www.datanucleus.org/products/accessplatform_2_1/jpa/jpql_criteria_metamodel.html
A mais recente implementação do Hibernate está disponível em:
Uma implementação mais antiga de hibernato está em:
Outras dicas
Por favor, dê uma olhada em JPA-Metamodels-With-Maven-Exemplo.
Hibernate
- Nós precisamos
org.hibernate.org:hibernate-jpamodelgen
. - A classe do processador é
org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
.
Hibernar como uma dependência
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>${version.hibernate-jpamodelgen}</version>
<scope>provided</scope>
</dependency>
Hibernar como processador
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<compilerArguments>-AaddGeneratedAnnotation=false</compilerArguments> <!-- suppress java.annotation -->
<processors>
<processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
</processors>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>${version.hibernate-jpamodelgen}</version>
</dependency>
</dependencies>
</plugin>
OpenJpa
- Nós precisamos
org.apache.openjpa:openjpa
. - A classe do processador é
org.apache.openjpa.persistence.meta.AnnotationProcessor6
. - OpenJpa parece exigir elemento adicional
<openjpa.metamodel>true<openjpa.metamodel>
.
OpenJpa como uma dependência
<dependencies>
<dependency>
<groupId>org.apache.openjpa</groupId>
<artifactId>openjpa</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArgs>
<arg>-Aopenjpa.metamodel=true</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
OpenJpa como processador
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<executions>
<execution>
<id>process</id>
<goals>
<goal>process</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<processors>
<processor>org.apache.openjpa.persistence.meta.AnnotationProcessor6</processor>
</processors>
<optionMap>
<openjpa.metamodel>true</openjpa.metamodel>
</optionMap>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.openjpa</groupId>
<artifactId>openjpa</artifactId>
<version>${version.openjpa}</version>
</dependency>
</dependencies>
</plugin>
Eclipselink
- Nós precisamos
org.eclipse.persistence:org.eclipse.persistence.jpa.modelgen.processor
. - A classe do processador é
org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor
. - Eclipselink exige
persistence.xml
.
Eclipselink como uma dependência
<dependencies>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
<scope>provided</scope>
</dependency>
Eclipselink como processador
<plugins>
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<processors>
<processor>org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor</processor>
</processors>
<compilerArguments>-Aeclipselink.persistencexml=src/main/resources-${environment.id}/META-INF/persistence.xml</compilerArguments>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
<version>${version.eclipselink}</version>
</dependency>
</dependencies>
</plugin>
DataNucleus
- Nós precisamos
org.datanucleus:datanucleus-jpa-query
. - A classe do processador é
org.datanucleus.jpa.query.JPACriteriaProcessor
.
DataNucleus como uma dependência
<dependencies>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-jpa-query</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
DataNucleus como processador
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<executions>
<execution>
<id>process</id>
<goals>
<goal>process</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<processors>
<processor>org.datanucleus.jpa.query.JPACriteriaProcessor</processor>
</processors>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-jpa-query</artifactId>
<version>${version.datanucleus}</version>
</dependency>
</dependencies>
</plugin>
O suporte JPA 2.0 do Eclipse através do DALI (que está incluído no "Eclipse IDE for JEE Developers") tem seu próprio gerador de metamodelo integrado ao Eclipse.
- Selecione seu projeto no Pacote explorador
- Vamos para Propriedades -> JPA diálogo
- Selecione a pasta de origem de Metamodelo canônico (JPA 2.0) grupo
- Clique Aplicar botão para gerar classes de metamodelo na pasta de origem selecionada
Isso deve funcionar em qualquer provedor JPA, pois as classes geradas são padrão.
Veja também aqui.
Para o Eclipselink, apenas a seguinte dependência é suficiente para gerar metamodelo. Nada mais é necessário.
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
<version>2.5.1</version>
<scope>provided</scope>
</dependency>
Para Hibernate como provedor, que é o IMHO mais comum:
No caso de ferramentas de construção como Gradle, Maven, você precisa ter o JPA JPA 2 Metamodel Gerator Jar no nível de classe e compilador> = 1,6 É tudo o que você precisa construir o projeto e o metamodelo será gerado automaticamente.
No caso do IDE Eclipse 1. Goto Project-> Properties-> Java Compiler-> Processamento de anotação e habilite. 2. Expandir Processamento de anotação-> Caminho da fábrica-> Adicionar frasco externo Adicione o frasco do gerador de metamodelo JPA 2 Hibernate Verifique o frasco recém-adicionado e diga OK. Limpe e construa feita!
Link hibernate jpa 2 metamodel generator jar link do maven repohttps://mvnrepository.com/artifact/org.hibernate/hibernate-jpamodelgen