Prof.Fbio Rener
import br.uniban.entity.Carro; public class JPAQuery { /** * @param args */ public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("aula9PU"); EntityManager em = emf.createEntityManager(); try{ em.getTransaction().begin(); Query query = em.createQuery("SELECT carro FROM Carro carro"); List<Carro> listaCarros = query.getResultList(); for (Carro carro : listaCarros) { System.out.println(carro); } em.getTransaction().commit(); } catch(Exception e){ System.out.println(e.getMessage()); }
Prof.Fbio Rener
import br.uniban.entity.Carro; public class JPAQuery2 { /** * @param args */ public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("aula9PU"); EntityManager em = emf.createEntityManager(); try{ em.getTransaction().begin(); Query query = em.createQuery("SELECT carro FROM Carro carro where carro.nome like :n "); query.setParameter("n", "%Fiesta%"); List<Carro> listaCarros = query.getResultList(); for (Carro carro : listaCarros) { System.out.println(carro); } em.getTransaction().commit(); } catch(Exception e){ System.out.println(e.getMessage()); } finally{ em.close(); } } }
Prof.Fbio Rener
Consultas nomeadas so consultas estticas definidas na sua entidade, essas consultas no podem ser alteradas e podem receber parmetros, devem ser escritas usando JPQL. Para usarmos o recurso de consulta nomeada devemos usar a annotation @NamedQuery ou @NamedQueries.
@NamedQueries usado quando temos varias consultas nomeadas, dentro dessa anotao podemos ter varias @NameQuery.
@NameQuery usada para mapear uma consulta dentro da prpria entidade, essa anotao recebe os parmetros, name (nome da consulta) e query (comando jpql que ser executado). Para executarmos uma consulta nomeada devemos usar o mtodo createNamedQuery da interface EntityManager e passar o nome que registramos nossa consulta durante o mapeamento.
Carro.java
package br.uniban.entity; import javax.persistence.*; import br.uniban.entity.pk.CarroPK; @Entity @Table(name="tb_carro", schema="uniban") @NamedQuery(name="Carro.findAll", query="SELECT carro FROM Carro carro") public class Carro { @EmbeddedId private CarroPK carroPK; @Column(name="str_nome", length=80) private String nome; public CarroPK getCarroPK() { return carroPK; } public void setCarroPK(CarroPK carroPK) { this.carroPK = carroPK; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } @Override public String toString() { return "Carro [carroPK=" + carroPK + ", nome=" + nome + "]"; }
Prof.Fbio Rener
JPAQuery3.java
package br.uniban.main; import java.util.List; import import import import javax.persistence.EntityManager; javax.persistence.EntityManagerFactory; javax.persistence.Persistence; javax.persistence.Query;
import br.uniban.entity.Carro; public class JPAQuery3 { /** * @param args */ public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("aula9PU"); EntityManager em = emf.createEntityManager(); try{ em.getTransaction().begin(); Query query = em.createNamedQuery("Carro.findAll"); List<Carro> listaCarros = query.getResultList(); for (Carro carro : listaCarros) { System.out.println(carro); } em.getTransaction().commit(); } catch(Exception e){ System.out.println(e.getMessage()); } finally{ em.close(); } } }
Usando @NamedQueries. 4
Prof.Fbio Rener
Carro.java
package br.uniban.entity; import javax.persistence.*; import br.uniban.entity.pk.CarroPK; @Entity @Table(name="tb_carro", schema="uniban") @NamedQueries({ @NamedQuery(name="Carro.findAll", query="SELECT carro FROM Carro carro"), @NamedQuery(name="Carro.findByLikeNome", query="SELECT carro FROM Carro carro WHERE carro.nome like :n") }) public class Carro { @EmbeddedId private CarroPK carroPK; @Column(name="str_nome", length=80) private String nome; public CarroPK getCarroPK() { return carroPK; } public void setCarroPK(CarroPK carroPK) { this.carroPK = carroPK; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } @Override public String toString() { return "Carro [carroPK=" + carroPK + ", nome=" + nome + "]"; } }
JPAQuery4.java
package br.uniban.main; import java.util.List; import import import import javax.persistence.EntityManager; javax.persistence.EntityManagerFactory; javax.persistence.Persistence; javax.persistence.Query;
Prof.Fbio Rener
/** * @param args */ public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("aula9PU"); EntityManager em = emf.createEntityManager(); try{ em.getTransaction().begin(); Query query = em.createNamedQuery("Carro.findByLikeNome"); query.setParameter("n", "%Fiesta%"); List<Carro> listaCarros = query.getResultList(); for (Carro carro : listaCarros) { System.out.println(carro); } em.getTransaction().commit(); } catch(Exception e){ System.out.println(e.getMessage()); } finally{ em.close(); } } }
Exerccios de Fixao:
3. Quando usamos consulta nomeada qual mtodo da interface EntityManager devemos usar para executar essa consulta?
Prof.Fbio Rener
4. Escreva uma entidade para a tabela abaixo e mapeia as seguinte consultas : a) Consulta por nome usando like; b) Consulta por endereo; c) Consulta por nome e telefone;