No espírito de segurança de tipo associado ao CriteriaQuery JPA 2.0 também tem uma API para suportar a representação de entidades de Metamodelo .
Alguém está ciente de uma implementação totalmente funcional desta API (para gerar o Metamodelo em vez de criar as classes do metamodelo manualmente)? Seria incrível se alguém também conhecesse as etapas para configurar isso no Eclipse (presumo que seja tão simples quanto configurar um processador de anotação, mas você nunca sabe).
EDIT: Acabei de descobrir o Gerador de Metamodelo Hibernate JPA 2 . Mas o problema permanece, já que não consigo encontrar nenhum link de download para o jar.
EDIT 2: Já se passou um tempo desde que fiz esta pergunta, mas pensei em voltar e adicionar um link para o projeto Hibernate JPA Model Generator no SourceForge
Por favor, dê uma olhada em jpa-metamodels-with-maven-example .
Hibernar
org.hibernate.org:hibernate-jpamodelgen
.org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
.Hibernar como uma dependência
Hibernate como um processador
OpenJPA
org.apache.openjpa:openjpa
.org.apache.openjpa.persistence.meta.AnnotationProcessor6
.<openjpa.metamodel>true<openjpa.metamodel>
.OpenJPA como uma dependência
OpenJPA como processador
EclipseLink
org.eclipse.persistence:org.eclipse.persistence.jpa.modelgen.processor
.org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor
.persistence.xml
.EclipseLink como uma dependência
EclipseLink como processador
DataNucleus
org.datanucleus:datanucleus-jpa-query
.org.datanucleus.jpa.query.JPACriteriaProcessor
.DataNucleus como uma dependência
DataNucleus como processador
fonte
something is recommended
semIMHO
? Não estou representando em nome de ninguém.persistence.xml
, não é?O suporte JPA 2.0 do Eclipse através do Dali (que está incluído no "Eclipse IDE para JEE Developers") tem seu próprio gerador de metamodelo integrado ao Eclipse.
Isso deve funcionar em qualquer provedor JPA, pois as classes geradas são padrão.
Veja também aqui .
fonte
Para eclipselink, apenas a seguinte dependência é suficiente para gerar o metamodelo. Nada mais é necessário.
fonte
<exclude-unlisted-classes>false</exclude-unlisted-classes>
listadas também, basta especificar em persisetence.xmlpersistence.xml
Para o Hibernate como provedor, qual é o IMHO mais comum:
No caso de ferramentas de construção como Gradle, Maven, você precisa ter o jar do Gerador de Metamodelo Hibernate JPA 2 no classpath e nível do compilador> = 1.6 que é tudo que você precisa para construir o projeto e o metamodelo será gerado automaticamente.
No caso do IDE Eclipse 1. vá para Projeto-> Propriedades-> Compilador Java-> Processamento de anotação e ative-o. 2. Expanda Processamento de anotação-> Caminho de fábrica-> Adicionar jar externo adicione jar do gerador de metamodelo JPA 2 do Hibernate, verifique o jar recém-adicionado e diga OK. Limpar e construir pronto!
Link Hibernate JPA 2 Metamodel Generator link do maven repo https://mvnrepository.com/artifact/org.hibernate/hibernate-jpamodelgen
fonte
<dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-jpamodelgen</artifactId> <scope>compile</scope> </dependency> </dependencies>
ao pom.xml foi o suficiente.Vamos supor que o nosso aplicativo usa o seguinte
Post
,PostComment
,PostDetails
, eTag
entidades, que formam um um-para-muitos, um-para-um, e muitos-para-muitos relações de tabela :Como gerar o Metamodelo de Critérios JPA
A
hibernate-jpamodelgen
ferramenta fornecida pelo Hibernate ORM pode ser usada para escanear as entidades do projeto e gerar o Metamodelo de Critérios JPA. Tudo que você precisa fazer é adicionar o seguinteannotationProcessorPath
ao arquivo de configuraçãomaven-compiler-plugin
do Mavenpom.xml
:Agora, quando o projeto é compilado, você pode ver que na
target
pasta, as seguintes classes Java são geradas:Metamodelo de entidade de tag
Se a
Tag
entidade for mapeada da seguinte maneira:A
Tag_
classe Metamodel é gerada assim:O
SingularAttribute
é usado para os atributos básicosid
e dename
Tag
entidade JPA.Metamodelo de entidade post
A
Post
entidade é mapeada assim:A
Post
entidade tem dois atributos básicosid
etitle
, umacomments
coleção de um para muitos , umadetails
associação de um para um e umatags
coleção de muitos para muitos .A
Post_
classe Metamodel é gerada da seguinte maneira:Os atributos básicos
id
etitle
, bem como adetails
associação um para um , são representados por umSingularAttribute
enquanto as coleçõescomments
etags
são representadas pelo JPAListAttribute
.Metamodelo de entidade PostDetails
A
PostDetails
entidade é mapeada assim:Todos os atributos da entidade serão representados pelo JPA
SingularAttribute
naPostDetails_
classe Metamodelo associada :Metamodelo de entidade PostComment
O
PostComment
é mapeado da seguinte forma:E todos os atributos de entidade são representados pelo JPA
SingularAttribute
naPostComments_
classe Metamodelo associada :Usando o Metamodelo de Critérios JPA
Sem o Metamodelo JPA, uma consulta de Criteria API que precisa buscar as
PostComment
entidades filtradas por seusPost
títulos associados ficaria assim:Observe que usamos o
post
literal String ao criar aJoin
instância e otitle
literal String ao fazer referência aoPost
title
.O Metamodelo JPA nos permite evitar atributos de entidade de codificação permanente, conforme ilustrado pelo seguinte exemplo:
Ou digamos que queremos buscar uma projeção DTO enquanto filtramos
Post
title
osPostDetails
createdOn
atributos e.Podemos usar o Metamodelo ao criar os atributos de junção, bem como ao construir os aliases da coluna de projeção DTO ou ao fazer referência aos atributos de entidade que precisamos filtrar:
Legal certo?
fonte
Ok, com base no que li aqui, fiz isso com EclipseLink desta forma e não precisei colocar a dependência do processador no projeto, apenas como um
annotationProcessorPath
elemento do plugin do compilador.fonte