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

Foi útil?

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

OpenJpa

DataNucleus


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.

  1. Selecione seu projeto no Pacote explorador
  2. Vamos para Propriedades -> JPA diálogo
  3. Selecione a pasta de origem de Metamodelo canônico (JPA 2.0) grupo
  4. Clique Aplicar botão para gerar classes de metamodelo na pasta de origem selecionada

enter image description here

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top