o que é Metamodelo JPA?
o JPA é enorme e lindo!, completo e abrange quase todos os aspectos da comunicacao entre banco de dados relacionais, e frequentemente quando escrevemos consultas utilizando criterios ou as famosas "criterias" , precisamos fazer referencia as classes de entidade e atributos que estamos fazendo a consulta.
Uma das maneiras claro e fornecer os nomes dos atributos como string que estamos consultando, mas isso gera mais desvantagens do que vantagem, e aceito voce utilizar as consultas por string num projeto pequeno, mas ja pensou quando o mesmo for expandido e ficar maior? varias alteracoes e caso uma coluna de atributo ou entidade seja alterado posteriormente, isso vai gerar bastante retrabalho.
Como funciona?
imagine o seguinte cenario abaixo, onde estamos construindo um sistema do aluno
`@Entity
@Table(name = "estudante")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "grad_year")
private int gradYear;
}`
Em seguida, precisamos gerar as classes de metamodelo e, para isso, usaremos a ferramenta geradora de metamodelo fornecida pelo JBoss, existem outras tais como EclipseLink, OpenJPA ..
para usar a ferramenta necessitamos adicionar ao pomxml a seguinte dependencia
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
</dependency>
Com base na especificação JPA, uma classe gerada residirá no mesmo pacote que a classe de entidade correspondente e terá o mesmo nome com um “_” conforme abaixo
`@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(Student.class)
public abstract class Student_ {
public static volatile SingularAttribute<Student, String> firstName;
public static volatile SingularAttribute<Student, String> lastName;
public static volatile SingularAttribute<Student, Integer> id;
public static volatile SingularAttribute<Student, Integer> gradYear;
public static final String FIRST_NAME = "firstName";
public static final String LAST_NAME = "lastName";
public static final String ID = "id";
public static final String GRAD_YEAR = "gradYear";
}`
Sendo assim fica facil, e so substituir em suas buscar com criterios para o metamodelo estático
Como gerar metamodel no Intellij?
Em configuracao, va ate a aba Compiler ou compilador, localize o Annotation Processors , ative o processamento de anotação e selecione obter do caminho de classe do projeto. Adicione o nome do processador de anotação org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor (e opcionalmente as opções do processador de anotação). Selecione o(s) módulo(s) que contém suas entidades no caso suas Classes, Se você configurou o Maven conforme recomendado, é melhor selecionar o mesmo diretório de saída para as classes geradas. Por padrao, é a pasta target/generated-sources/apt .
Bem espero ter Ajudado ate a proxima 👨💻
forma, as classIntelliJ Idea.
Top comments (0)