Static Metamodel

O que é?
É uma maneira de representar os atributos da classe de forma, mostrando seus relacionamentos

Por que utilizar?
Pois torna as Criteria Query criadas, ainda mais TypedSafe e por esse motivo já diminui os possíveis erros de acontecerem.
Perante a minha experiencia com Criteria Query e Static Metamodel, so tive os seguintes problemas , quando à  alteração do atributo de modo a trocar tipo ou trocar o seu nome. Caso o mesmo seja alterado conforme dito anteriormente, ao tentar o utilizar esse atributo do Metamodel o mesmo ira lançar uma Exceção de NullPointerException

Como criar
Para criar um Static Metamodel, deve-se ter uma Entidade, um Embeddable, uma MappedSuperclass, algo que de uma forma represente dados em uma tabela. Lembrando que a classe deve estar no Persistence Unit, para ser gerenciada pelo Provider.
Conforme exemplo abaixo:
package br.umpoucomais.entidades;
/**
Importações
*/
@Entity
public class Cliente{
 
 @Id
 private Long id;

 @Column(name = "CPF", length = 11, nullable = false)
 private String cpf;
 
 @Column(name = "RG", nullable = false)
 private String rg;
 
 @Column(name = "NOME", nullable = false)
 private String nome;
 
 @ElementCollection
 @CollectionTable(name = "DADOS_TELEFONE")
 @MapKeyColumn(name = "TIPO_TELEFONE")
 @Column(name = "TELEFONE")
 private Map<String, String> telefones;
 
 @ElementCollection
 private Set<String> emails;
}

Conforme a JSR 317, que possui a especificação da JPA, diz que para criar um metamodel, deve-se seguir os segunintes passos:
-O Static Metamodel é uma classe
-Deve ser anotada com a anotação @StaticMetamodel(javax.persistence.metamodel)
-É obrigatório estar no mesmo pacote da classe
-O nome deve ser o mesmo da classe a da qual o metamodel será criado, porem terminando com "_"
-A Nomenclatura dos atributos deve ser a mesma da classe

Conforme exemplo abaixo:
package br.umpoucomais.entidades;

/**
Importações
*/
@StaticMetamodel(value = Cliente.class)
public class Cliente_ {

 public static volatile SingularAttribute<Cliente, Long> id;
 public static volatile SingularAttribute<Cliente, String> cpf;
 public static volatile SingularAttribute<Cliente, String> rg;
 public static volatile SingularAttribute<Cliente, String> nome;
 public static volatile MapAttribute<Cliente, String, String> telefones;
 public static volatile SetAttribute<Cliente, String> emails; 
}

Comments

Post a Comment

Popular posts from this blog

Tela preta no Backtrack 5 ao executar o startx

Maven Error assembling EJB: META-INF/ejb-jar.xml is required for ejbVersion 2.x