Baixe o app para aproveitar ainda mais
Prévia do material em texto
W W W. D OMI NAND OTI .COM.B R WWW.DOMINANDOTI .COM.BR JPA Professor Marcelo Pacote – @profmarcelopacote W W W. D OMI NAND OTI .COM.B R Acesse nosso site em WWW.DOMINANDOTI.COM.BR Curta o Dominando TI no e receba nossas dicas sobre concursos! Cursos Turmas em Brasília, na sua cidade, e cursos online Livros Edições publicadas, lançamentos e promoções Fórum Interação direta entre estudantes e com os professores Simulados Questões inéditas, ranking de notas e correções em vídeo Blog Dicas e macetes de estudo, indicações de bibliografia, etc. Materiais Versões atualizadas de notas de aula e listas de exercícios W W W. D OMI NAND OTI .COM.B R Java Persistence API (JPA) Adicionada na versão 3.0 da especificação EJB. Apesar da JPA ter sido lançada como parte da especificação EJB 3, pode ser utilizada mesmo em projetos que não utilizem EJB. Java SE, por exemplo. A JPA lida com a forma que os dados relacionais são mapeados para objetos Java (“entidades de persistência”) e a forma que estes objetos são armazenados em um banco de dados relacional. Padroniza o mapeamento objeto-relacional, permitindo que diferentes implementações compatíveis possam ser usadas, como são os casos das bibliotecas TopLink, EclipseLink, OpenJPA e Hibernate. Professor Marcelo Pacote - @profmarcelopacote 3 W W W. D OMI NAND OTI .COM.B R Java Persistence API (JPA) Para desenvolver uma aplicação com JPA é necessário: Mapear classes de negócio em entidades de um banco Definir uma unidade de persistência; Definir um managed datasource (conexão com um banco de dados); Há duas formas de mapear classes de negócio a entidades de um banco de dados: XML; Anotações; Professor Marcelo Pacote - @profmarcelopacote 4 W W W. D OMI NAND OTI .COM.B R Definindo unidade de persistência Uma unidade de persistência é uma referência a uma unidade de trabalho com um banco: Definida no arquivo persistence.xml Especifica se será usado hibernate, toplink ou outra implementação JPA, conexão com banco de dados, etc. <persistence> <persistence-unit name=“exemplojpa“ > <provider> org.apache.openjpa.persistence.PersistenceProviderImpl </provider> <class>entidades.Cliente</class> <properties> <property name="openjpa.ConnectionURL“ value="jdbc:postgre://localhost:5432/jpa"/> <property name="openjpa.ConnectionDriverName" value="org.postgresql.Driver"/> <property name="openjpa.ConnectionUserName“ value="postgres"/> <property name="openjpa.ConnectionPassword" value="123456"/> </properties> </persistence-unit> </persistence> Professor Marcelo Pacote - @profmarcelopacote 5 W W W. D OMI NAND OTI .COM.B R Anotações Básicas @Entity Anota a classe como uma entidade persistente. É preciso ter um construtor sem argumentos @Table(name = "forum" ) Nome da tabela da entidade @Id Diz qual atributo é a chave primária. @ManyToOne ou @OneToMany ou @OneToOne ou Professor Marcelo Pacote - @profmarcelopacote 6 W W W. D OMI NAND OTI .COM.B R Exemplo de classe de entidade Nomes de tabelas de colunas são opcionais Professor Marcelo Pacote - @profmarcelopacote 7 W W W. D OMI NAND OTI .COM.B R Como mapear herança? 1) Uma tabela por classe concreta Dados não normalizados Depende de um UNION para consultas na superclasse. Ideal para hierarquias horizontais 2) Uma única tabela para toda hierarquia de classes Utiliza discriminator para diferenciar elementos da hierarquia. Queries são feitas em uma única tabela, que pode se tornar bastante grande. Modelo mais simples. Modelo default. Ideal para hierarquias com poucas classes. 3) Uma tabela por classe da hierarquia Permite associações e consultas polimórficas Dados normalizados. Sempre realiza join. Usado em hierarquias de muitos níveis (verticais). Professor Marcelo Pacote - @profmarcelopacote 8 W W W. D OMI NAND OTI .COM.B R Mapeamento de relacionamentos – One-to-one @Entity public class Cliente implements Serializable { @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name="passport_id") public Passporte getPassaporte() { ... } } @Entity public class Passaporte implements Serializable { @OneToOne(mappedBy = "passaporte") public Customer getCliente() { ... } } Professor Marcelo Pacote - @profmarcelopacote 9 W W W. D OMI NAND OTI .COM.B R Mapeamento de relacionamentos – One-to-Many @OneToMany(mappedBy=“responsavel") public Collection getDependentes() { return dependentes } @ManyToOne @JoinColumn(name=“PESSOA_DEP") public Pessoa getResponsavel(){ return responsavel } Pessoa Dependente0..*1 0..*1 +dependentes+responsavel Professor Marcelo Pacote - @profmarcelopacote 10 W W W. D OMI NAND OTI .COM.B R Relacionamentos – a questão da carga de dados Em atributos, associações e coleções em entidades é possível especificar o tipo de carga inicial. Cargo imediata (eager fetching) Default para one-to-one e many-to-one Carga preguiçosa (lazy fetching) Default para relacionamentos one-to-many e many-to- many Professor Marcelo Pacote - @profmarcelopacote 11 W W W. D OMI NAND OTI .COM.B R EntityManager Um objeto do tipo EntityManager controla o acesso ao banco de dados; Por exemplo, EntityManager.persist(object) irá persistir um POJO object no banco; Com um EntityManager pode-se também recuperar ou remover um objeto no banco Cliente cliente = em.find( Cliente.class, cpf ); Pode-se fazer consultas específicas: em.createQuery("SELECT reg.login FROM Servidor reg ORDER BY reg.login").getResultList(); Professor Marcelo Pacote - @profmarcelopacote 12 W W W. D OMI NAND OTI .COM.B R Igualdade X Identidade Java método equals Banco de dados mesmo registro de uma tabela Em frameworks ORM, identidade e igualdade de entidades estão diretamente relacionados a caching, locking e transações. Para um contexto de persistência, podem surgir problemas quando esses conceitos entre Java e bancos de dados relacionais não são equivalentes. Reimplementar os métodos equals e hashCode Professor Marcelo Pacote - @profmarcelopacote 13 W W W. D OMI NAND OTI .COM.B R Consultas API Criteria Solução para criação dinâmica de consultas. JPQL: SELECT c.name, a FROM Account a JOIN a.customer c WHERE c.city = :city É possível executar consultas SQL nativas através da API EntityManager Professor Marcelo Pacote - @profmarcelopacote 14 W W W. D OMI NAND OTI .COM.B R Exercício [8] (MPU/2010/CESPE/Técnico) ( ) A API de Persistência Java é embasada em ideias contidas em frameworks líderes de mercado, como Hibernate, Oracle TopLink e Objetos de Dados Java. Professor Marcelo Pacote - @profmarcelopacote 15 W W W. D OMI NAND OTI .COM.B R Exercício [9] (TRE-MT/2010/CESPE/Analista) ( ) JPA lida com a forma como dados relacionais são mapeados para objetos Java e com a forma como esses objetos são armazenados em um banco de dados relacional. Professor Marcelo Pacote - @profmarcelopacote 16 W W W. D OMI NAND OTI .COM.B R Exercício [10] (TRE-MT/2011/FCC) Professor Marcelo Pacote - @profmarcelopacote 17 W W W. D OMI NAND OTI .COM.B R Exercício [10] (TRE-MT/2011/FCC) Em relação à JPA (Java Persistence API) é INCORRETO afirmar que a) @NamedQuery é aplicada para definir várias consultas. b) @Entity define que haverá correspondência da classe comuma tabela do banco de dados. c) @Id define que o atributo que está mapeado com tal anotação corresponderá à chave primária da tabela. d) @Column(name = "id", nullable = false) define que o atributo da classe mapeado com tal anotação deve estar associado à coluna cujo nome é "id", além de definir que tal campo não pode ser nulo. e) @OneToMany indica que o atributo contém um conjunto de entidades que a referenciam. Professor Marcelo Pacote - @profmarcelopacote 18 W W W. D OMI NAND OTI .COM.B R Gabarito [1] d [2] b [3] e [4] ee [5] c [6] ee [7] e [8] certo [9] certo [10] a Professor Marcelo Pacote - @profmarcelopacote 19
Compartilhar