java jpa jpa-2.0 metamodel annotation-processing

java - ¿Cómo generar el metamodelo JPA 2.0?



jpa-2.0 annotation-processing (5)

En el espíritu de la seguridad de tipo asociado con el CriteriaQuery JPA 2.0 también tiene una API para admitir la representación de entidades Metamodel .

¿Alguien está al tanto de una implementación completamente funcional de esta API (para generar el Metamodelo en lugar de crear las clases del metamodelo manualmente)? Sería increíble si alguien también conoce los pasos para configurar esto en Eclipse (supongo que es tan simple como configurar un procesador de anotaciones, pero nunca se sabe).

EDITAR: Acabo de tropezar con Hibernate JPA 2 Metamodel Generator . Pero el problema persiste ya que no puedo encontrar enlaces de descarga para el contenedor.

EDIT 2: Ha pasado un tiempo desde que hice esta pregunta, pero pensé que volvería y agregaría un enlace al proyecto Hibernate JPA Model Generator en SourceForge


Sería increíble si alguien también conoce los pasos para configurar esto en Eclipse (supongo que es tan simple como configurar un procesador de anotaciones, pero nunca se sabe)

Sí lo es. Aquí están las implementaciones e instrucciones para las diversas implementaciones de JPA 2.0:

EclipseLink

Hibernar

OpenJPA

DataNucleus

La última implementación de Hibernate está disponible en:

Una implementación más antigua de Hibernate está en:


REVISADO (marzo / 2014)

Por favor, eche un vistazo a jpa-metamodels-with-maven

Hibernar

Usar Hibernate es lo más recomendado.

( No estoy juzgando ninguna característica / funciones / usabilities / stabilites en esas implementaciones. Y la declaración anterior solo se enfoca en el uso de maven que construí ) .

<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.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor> </processors> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-jpamodelgen</artifactId> <version>4.3.4.Final</version> </dependency> </dependencies> </plugin>

OpenJPA

OpenJPA parece requerir un elemento adicional <openjpa.metamodel>true<openjpa.metamodel> .

<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>2.3.0</version> </dependency> </dependencies> </plugin>

EclipseLink

EclipseLink requiere persistence.xml .

<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.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor</processor> </processors> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId> <version>2.5.1</version> </dependency> </dependencies> </plugin>

========================================

Para los usuarios de Apache Maven,

Seguir una configuración simple parece funcionar. ( con el viejo compilador maven-compiler, actualizado )

<!-- This method doesn''t work with newest maven-compiler-plugin --> <!-- But if it''s ok to work with old maven-compiler-plugin --> <!-- This is the best method --> <!-- There is no other required configurations --> <!-- We don''t even require to config any processor names --> <project> <build> <extensions> <extension> <groupId>org.hibernate</groupId> <artifactId>hibernate-jpamodelgen</artifactId> <version>1.3.0.Final</version> </extension> </extensions> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <!-- this is critical --> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> </project>

puedes ejecutarlo con "mvn compiler: compile"

ACTUALIZAR

Tenga en cuenta que este método solo funciona con los viejos compiladores maven-compiler. Verifique la versión en código.


El soporte JPA 2.0 de Eclipse a través de Dali (que está incluido en "Eclipse IDE para desarrolladores JEE") tiene su propio generador de metamodelos integrado con Eclipse.

  1. Seleccione su proyecto en el Explorador de paquetes
  2. Vaya a Propiedades -> diálogo de JPA
  3. Seleccione la carpeta de origen del grupo de metamodelo Canonical (JPA 2.0)
  4. Haga clic en el botón Aplicar para generar clases de metamodelo en la carpeta de origen seleccionada

Esto debería funcionar en cualquier proveedor de JPA ya que las clases generadas son estándar.

Ver también here .


Para Hibernate como proveedor, que es lo más común en mi humilde opinión:

En el caso de las herramientas de compilación como Gradle, Maven necesita tener Hibernate JPA 2 Metamodel Generator jar en classpath y compilador nivel> = 1.6 que es todo lo que necesita construir el proyecto y el metamodelo se generará automáticamente.

En el caso de IDE Eclipse 1. vaya a Proyecto-> Propiedades-> Compilador de Java-> Procesamiento de anotaciones y habilítelo. 2. Amplíe el proceso de anotación-> Ruta de fábrica-> Agregar tarro externo agregue Hibernate JPA 2 Metamodel Generator jar revise el tarro recién agregado y diga OK. ¡Limpiar y construir hecho!

Enlace Hibernate JPA 2 Metamodel generador jar enlace de maven repo https://mvnrepository.com/artifact/org.hibernate/hibernate-jpamodelgen


Para eclipselink, solo la siguiente dependencia es suficiente para generar el metamodelo. Nada más es necesario.

<dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId> <version>2.5.1</version> <scope>provided</scope> </dependency>