Programa de disciplina resumido



Baixar 250,33 Kb.
Página2/3
Encontro06.09.2018
Tamanho250,33 Kb.
1   2   3

Mapeamento Básico de Entidades

É feito com anotações nas classes persistentes:


@Entity: Marca uma classe como entidades persistente;

@Table: Define o nome da tabela onde os objetos serão persistidos;

@Id: Define o atributo que constitui o atributo identificado (chave primaria);

@GeneratedValue: Define um campo autonumerico;

@Column: Define o nome da coluna onde o atributo será salvo;

@Transient: Define que um atributo não será salvo;


Exemplo:
import javax.persistence.*;

@Emtity

@Table(nome="Aluno")

public class Aluno {

@Id

@GeneratedValue(strategy = GenerationType, IDENTITY)

@Column(name = "id", nullable=false,columnDefinition="integer")

private int id;

@Column(name="nome", length=50, nullable=false)

private String nome;

@Coloumn(nome="ra")

private long ra;

public int getRa(){

return ra;

}

public void setName(String nome){



this.name = nome;

}

//Demais getters e setters



}
16-08-2010

/*Exemplo usando mapeamento padrão */



import javax.persistence.*;

@Entity


public class Aluno2{

@Id


@GeneratedValue

private int id;

private String nome;

private lang a;

}
Representação em Diagrama de classe (UML):



<>

Aluno


-id: integer

-nome:String

-ra:long


...


23-08-2010
ROTEIRO

No código da aplicação que utiliza classe peristentes:


  • Crie um gerenciador de entidades através de uma fabrica:

EntityManagerFactory emf = Persistence. createEntityManagerFactory("UnidadeDePersistencia");

EntityMnager em = emf.createEmtityManager();




  • Inicie uma transação

em.getTransaction().begin();


Entidade e = new entidade();


  • Persista a entidade

em.persist(e);


  • Localize uma Entidade

Entidade e = em.emf(Entidade.class,chave);


  • Reintegre uma entidade ao Contexto de Perstência

e = em.merge(e);


  • Elimine uma entidade do BD

em.remove(e)


  • Encerra a transação

em.getTransaction().commit();


Interface EntityManager

Alguns métodos:

  • void persist (Object entidade)

Persiste uma entidade, tornando-a gerenciada pelo Gerenciador de Entidades Qualquer

alteração feita na entidade será refletida no banco de dados automaticamente.



T merge(T entidade)

Reintegra a entidade ao Contexto de Persistência. Retorna um objeto gerenciado(MENAGED),

cujas alterações são enviadas automaticamente ao BD. Não pode ser usado em um objeto REMOVED.



  • void refresh (Object entidade)

Atualiza os atributos da entidade com os dados atuais do banci de dados.



  • void remove(Object entidade)

Remove a entidade do banco de dados e do Context de Persistência, tornando-a REMOVED



  • T find(Class classeDaEntidade, Object chavePrimaria)

Retorna uma entidade gerenciada da classe espeficicada, encontrada através de sua chave primária.

Retorna null caso não a encontre.





  • Query createQuery(String comando)

Cria uma consulta dinâmica em JPQL



  • Query createNamedQuery(String nomeDoComando)

Cria uma consulta nomeda escrita em JPQL


  • Query creteBativeQuery(String comando SQL)

Cria uma consulta em SQL nativo do BD conectado



  • EntityTransaction getTransaction()

Retorna a transação do EntityManager

Interface EntityTransaction



  • void begin()

Inicia a transação



  • void commit()

Encerra a transação, confirmando as alterações feitas desde o seu início



  • void rollback()

Encerra a transação, descartando as alterações feitas desde o seu início.

Exemplo de aplicações JvaSt usando Oracle TopLink
Baixe o TopLink Essentials do seguinte endereço:

http://www.oracle.com/technology/products/ias/toplink/jpa/download.html

Obs. É um download pequeno.
Coloque o arquivo baixado em uma pasta de trabalho e execute o seguinte comando nesta pasta:

Java –jar glossifish-persistence-installer-v2-bxx.jaro

Isto irá criar uma pasta chamada glossfish-persistence contendo os arquivos de licença, readme e as bibliotecas do Toplink Essentials

2RD-PARTY-LICENCE.txt

CDDLv1.0.txt

README


Toplink-essentials-agent.jar

Toplink-essentials.jar

Crie um projeto Java5 ou superior e adicione os arquivos.jar acima ao classpath, para que sua aplicação encontre as bibliotecas. Adicione também o .jar do driver JDBC do banco de dados que for utilizar.

O NetBens já incorpora o Toplink Essentials.

Para utilizá-lo, clique com o botão direito no nó “Nova Biblioteca...”. A seguir selecione Toplink Essentials da lista, assim como o driver JDBC de BD que for utilizado.

no Eclipse, clique com o botão direito no seu projeto e selecione “Propriedades” -> ”Java BuildPath” -> “Libraries” e clique no botão “Add external jars”. Adicione os dois .jar. Adicione os dois .jar baixados acima e o .jar do driver JDBC.
Crie a entidade Aluno abaixo:

package modelo;

import javax.persistent;

@Entity


public class Aluno{

@Id


@GeneratedValue(strategy = GenerationType.IDENTITY)

private int id;

private String nome;

private long ra;

private double ms1;

private double ms2;

//getters e setters aqui!

}

Crie o arquivo persistence.xml na pasta META-INF do seu projeto:


Crie a entidade Aluno abaixo:

package modelo;

anagimport javax.persistent;

@Entity


public class Aluno{

@Id


@GeneratedValue(strategy = GenerationType.IDENTITY)

private int id;

private String nome;

private long ra;

private double ms1;

private double ms2;

}

 

   
oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider

   

    teste.Empresas

    teste.Cartoes

   

     

     

     

     

   

 

30/08/2010


//Inclusão: Crie o seguinte aplicativo no pacote negócio do seu projeto

package negocio;

import modelo.*;

import javax.persistence.*;

public class CriaAluno{

public static void main(String args[]){

EntityManagerFactory emf=Persistence.createEntityFactory("teste");

EntityManager em=emf.createEntityManager();

em.getTransaction().begin();

Aluno a = new Aluno();

a.setNome("Maria");

a.setRa(123456789);

a.setMs1("6.5");

a.setMs2("8.5");

//Insere a entidade no BD, tornando-a gerenciada

em.persist(a);

em.getTransaction().commit();

em .close();

emf.close();

System.out.print("Id do aluno persistido: "+a.getId());

}

}
//Consulta: Localiza uma entidade por sua chave primaria



package negocio;

import modelo.*;

import javax.persistence.*;

public class BuscaAluno{

public static void main(String args[]){

EntityManagerFactory emf = Persistence.createEntityFactory("teste");

EntityManager em = emf.createEntityManager();

//Método find: retorna uma entidade gerenciada

Aluno a = em.find(Aluno.class,3);



if(a != null){

System.out.print("RA: "+a.getRa());

System.out.print("Nome: "+a.getNome());

//Apesar da entidade estar gerenciada, a alteração não ocorre, pois não há transação

a.setNome("Nome do aluno");

else{

System.out.print("Aluno não encontrado");

}

em.close();



emf.close();

}

}




//Alteração: Localiza uma entidade por sua chave primária e altera seus atributos

package negocio;

import modelo.*;

import javax.persistence.*;

public class AlteraAluno{

public static void main(String args[]){

EntityManagerFactory emf=Persistence.createEntityFactory("teste");

EntityManager em=emf.createEntityManager();

em.getTransaction().begin();

//Rertorna uma entidade gerenciada:

Aluno a = em.find(Aluno.class,1);

if(a != null){

//Alteracoes automáticas(sem usar transaction SQL)

a.setNome("Novo nome");

a.setRa(987654321);

a.setMs1(7.8);

a.setMs2(8);

System.out.print("Id do aluno alterado: "+a.getId);

}

em.getTransaction().commit();



em.close();

emf.close();

}

}
Exclusão: Localiza uma entidade por sua chave primária e a exclui


package negocio;

import modelo.*;

import javax.persistence.*;

public class ExcluiAluno{

public static void main(String args[]){

EntityManagerFactory emf=Persistence.createEntityFactory("teste");

EntityManager em=emf.createEntityManager();

em.getTransaction().begin();

Aluno a = em.find(Aluno.class,8);



if(a != null){

//Torna a entidade REMOVED. Qualquer

//alteração não será reflitida no BD

em.remove(a);

System.out.print()

System.out.print("Aluno excluido: "+a.getId());

System.out.print(""+a.getNome);

}else{

System.out.print("Aluno não encontrado.");

}

em.getTransaction().commit();



em.close();

emf.close();

System.out.println(“Novo nome:”}+a.getNome());

}else

{

System.out.printl(“Aluno não encontrado”);

}

em.close();

emf.close();

}

Private static Aluno mudaDados(Aluno a)

{

a.setNome(“Juliana”);

return a;
}

}


20/09/2010

Relacionamentos
@one to one = Inidica o atributo mapeia outra entidade, com a relação “um para um.

No banco de dados, este campo é uma chave estrangeira. Na entidade, é uma instancia da entidade referenciada.




Package modelo;

Import javax.persistence.*;

Import java.10.Serializable;

@Entity


Public class Aluno implements Serializable

{

@Id



@generatedValue(strategy=generationType.IDENTITY)

Private int id;

Private String nome;

Private long ra;

Private double ms1;

Private double ms2;

@oneToone

Private Foto foto;

//getters e setters aqui

}

Package modelo;



Import javax.persistence.*;

Import java.10.Serializable;

@Entity

Public class Foto implements Serializable



{

@Id


@generatedValue(Strategy=genrationType.IDENTITY)

Private int id;

Private byte [] foto;

@oneToone(mappedBy=”foto”)

Private Aluno aluno;

‘’getters e setters aqui

}

Uso


Main.....

.

.



.

Aluno a=em.find(Aluno.class, 12);

Byte [ ] f=a.getFoto().getFoto();

.

.



Foto f= em.find(foto.class, 216);

System.out.println(“O dono da foto é “+ f.getaluno().getNome());

@manyToOne: Indica que o atributo mapeia outra entidade com a relação “muitos para um” No banco de dados, este campo é uma chave estrangeira. Na entidade, ‘’e uma instancia da entidade referenciada.

@onetomany Indica que o atributo contem um Set (conjunto) de entidades que a referenciam



Este campo não possui representação em banco de dados. É preenchido em tempo de execução pelo JPA com uma consulta em SQL usando junção entre tabelas (Join)

Package modelo;

Import javax.persistence.*;

Import java.10.Serializable;

@Entity import java.utiliSet;

Public class Aluno implements Serializable

{

@Id


@generatedValue(strategy=generationType.IDENTITY)

Private int id;

Private String nome;

Private long ra;

Private double ms1;

Private double ms2;

@oneToone

Private Foto foto;

@onetoMany (mappedBy= “aluno”)

Private Set


pagamentos;

//getters e setters aqui

}

Package modelo;



Import javax.persistence.*;

Import java.10.Serializable;

@Entity

Public class Pagamentos implements Serializable



{

@Id


@generatedValue(Strategy=genrationType.IDENTITY)

Private int id;

Private double valor;

Private String observações ;

@ManyToOne

Private Aluno aluno;

‘’getters e setters aqui

}

Uso



Main

.

.



Pagamento p = em.find (pagamento.class,327);

Aluno a=em.find(aluno.class,37);

Set
pagamentos=a.get pagamentos ();

Iterator


Iterator Pagtos=pagamentos.iterator();

While(iterator Pagtos.hasNext());

{

Pagamentos p= iterator Pagtos.next();



System.out.println (p.getData());

}
@ManyToMany: Indica que o atributo contém um Set(conjunto) de entidades que a referenciam com a relação “muitos para muitos”. No banco de dados este relacionamento é feito com o uso de uma tabela auxiliar.




Aluno

Id:integra(PK)



Disciplina

Id:integer(PK)


Package modelo;

Import javax.persistence.*;

Import java.10.Serializable;

@Entity



Public class Aluno implements Serializable

{

@Id



@generatedValue(strategy=generationType.IDENTITY)

Private int id;

Private String nome;

Private long ra;

Private double ms1;

Private double ms2;

}

@OneToOne



private Foto foto;

@OneToMany(mappedBy="Aluno")

private Set
pagamento;

@ManyToMany

private Set disciplina;

//getters e setters aqui


04/10/2010

Consulta em JPA – Exemplos

Consulta que retorna um único resultado:
private void consultaAlunoRA(){

try{


Query consulta = em.createQuery("SELECT a FROM Aluno a WHERE a.ra=:ra");

consulta.setParameter("ra", 12345);

Aluno a = (Aluno) consulta.getSingleResult();

System.out.println("Aluno encontrado por RA: ");

System.out.printf("RA: %d \n", a.getRa());

System.out.printf("Nome: %d \n", a.getNome());

} catch (NoResultException e) {

System.out.println("Aluno não encontrado.");

} catch (NonUniqueResultException e){

System.out.println("Mais de um aluno encontrado");

}

}

Consulta que retorna mais de um resultado


private void consultaAlunoPorMedia(double media){

System.out.println("Consulta aluno por media: ");

Query consulta = em.createQuery("SELECT a FROM Aluno a WHERE a.ms1 * 0.4 + a.ms2 * 0.6 > :media");

consulta.setParameter("media", media);

List alunos = consulta.getResultList();

System.out.printf("\nAlunos encontrados com média final maior que %3.1f:\n", media);

if(! aluno.isEmpty()){

for(Aluno a:alunos){

System.out.printf("Nome: %10s, MS1: %3.1f, MS2: %3.1f\n", a.getNome(), a.getMs1(), a.getMs2());

}

} else {



System.out.println("Nenhum aluno encontrado.");

}

}



Paginação de resultados
private void consultaPaginada(int alunoId){
System.out.println("Consulta com paginação de resultados:");

Query consulta;

List
pagamentos;

Aluno a = em.find(Aluno.class, alunoId);

int inicio = 0;

int maximo = 3;

int pagina = 1;

do{


consulta = em.createQuery("SELECT p FROM Pagamento p WHERE p.aluno=:aluno ORDER BY p.observacoes");

consulta.setParameter(“aluno”, a);

pagamentos = consulta.setMaxResults(maximo).setFirstResult(inicio).getResultList();

if(! pagamentos.isEmpty()){

System.out.printf("\nPag.: %d\n", pagina);

for(Pagamento p:pagamentos){

System.out.printf("Observacoes: %s\n", p.getObservacoes());

}

}



inicio += maximo;

pagina++;

} while(! pagamentos.isEmpty());

}
Consultas Nomeadas (Identificadas)


São consultas pré-definidas nas classes de entidades e podem sereutilizadas em

diferentes pontos da aplicação, o que facilita a sua manutenção. São declaradas

atravez das seguintes anotações:

@NomedQuery: Define uma consulta nomeada.

@NomedQueries: Define um vetor de consultas nomeadas.
Na entidade, antes da anotação @Empty, declare as consultas nomedas:

@NomedQueries({

@NomedQuery(nome="consultaPorRa", query="SELECT a FROM Aluno a WHERE a.ra=:ra");

@NomedQuery(nome = "consultaPorMedia", query = "SELECT a FROM Aluno a WHERE a.ms1*0.4+a.ms2*0.6>:media");

Na aplicação, utilize as consultas nomeadas:

Query consultas = em.createNomeQuery("consultaPorMedia");

consulta.setParameter("media",5);

1   2   3


©bemvin.org 2016
enviar mensagem

    Página principal