JPA Java Persistence API



Documentos relacionados
UFG - Instituto de Informática

UNIVERSIDADE FEDERAL DO PIAUÍ DEPARTAMENTO DE COMPUTÇÃO DISCIPLINA: ENGENHARIA DE SOFTWARE II PROFESSOR: ARMANDO SOARES

Mapeamento Objeto-Relacional

Proporcionar a modelagem de sistemas utilizando todos os conceitos da orientação a objeto;

Hibernate na sua aplicação JavaWeb

JPA: Persistência padronizada em Java

1.1. Definição do Problema

LINGUAGEM SQL Linguagem usada em SGBD para: Definir estrutura de dados; Modificar dados em um banco de dados; Especificar restrições de segurança; Rea

Framework Hibernate/JPA

Orientação a Objetos

- Campus Salto. Disciplina: Sistemas de Arquivos Docente: Fernando Santorsula

JPA - Java Persistence API. Entity. Entity Campos e Propriedades Entity Chaves Primárias Entity Associações. Entity Manager

JPA - Java Persistence API. Entity. Entity Campos e Propriedades Entity Chaves Primárias Entity Associações. Entity Manager

Introdução a Banco de Dados. INTRODUÇÃO

Processo de Desenvolvimento de Software

Padrões de Projeto. Factory Method

Programação Orientada a Objetos. Professor Leonardo Cabral - Larback

Mapeamento Lógico/Relacional com JPA

Tipos de Banco de Dados - Apresentação

RESPOSTAS AOS QUESTIONAMENTOS ESCLARECIMENTOS EMPRESA B

Desenvolvimento para Web com Java

BANCO DE DADOS I AULA 2. Willamys Araújo willamysaraujo7@gmail.com

PERSISTÊNCIA DE DADOS EM JAVA UTILIZANDO HIBERNATE: Mapeamento Objeto / Relacional


Documento de Requisitos do Sistema SISFOTO Sistema de gerenciamento de eventos fotográficos Versão 1.0

Modelo Entidade Relacionamento (MER)

Conexão com Banco de Dados

Programação de Computadores - I. Profª Beatriz Profº Israel

Algoritmos e Programação II

BANCO DE DADOS. Professor: André Dutton

Glossário Versão 1.0 Desenvolvimento do Sistema de Gestão de Documentos Doc Manager Histórico de Revisão

SUMÁRIO PARTE I. Princípios de Projeto, a Linguagem de Modelagem Unificada (Unified Modeling Language, ou UML) e Projeto em Nível de Código

Elementos básico de uma rede Samba - Local Master Browser

Lista de Exercícios Para a P2

3. Numerar a coluna da direita conforme a da esquerda 1) Classe (2) :Aluno 2) Um dado objeto (3) oaluno:aluno 3) Objeto (1) Aluno

Criando uma aplicação web. Parte 1

Persistência de Dados em Java com JPA e Toplink

Aula 2 - Revisão de JPA (Java Persistence API)

Banco de Dados. Banco de Dados. Conceitos Básicos. Banco de Dados SGBD SGBD. Fundamentos. Fernando Fonseca Ana Carolina.

PROGRAMAÇÃO ORIENTADA A OBJETO INTRODUÇÃO

Java Persistence API. Entity Entity Campos e Propriedades Entity Chaves Primárias Entity Associações

UTILIZAÇÃO DE ARQUITETURA EM CAMADAS BASEADA NO MODEL VIEW CONTROLLER, EM APLICAÇÕES WEB

Structural Patterns - Proxy

Hibernate. Mapeamento Objeto-Relacional. Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior

Motivação Este trabalho apresenta o desenvolvimento do controle da interatividade num sistema para a área de computação gráfica, mais especificamente

JPA Com Hibernate. Paulo Ricardo Lisboa de Almeida. 1 Universidade Positivo

Guia de desenvolvimento de um aplicativo para o sistema operacional Android

SisJus Sistema de Cadastro de Processos Jurídicos. We are able to do the better Team. Setembro de 2009, Maceió AL

JAVA ENTERPRISE EDITION: CRIAR BEANS DE ENTIDADE A PARTIR DE TABELAS

Programação em JAVA. Subtítulo

3 Informações para Coordenação da Execução de Testes

País(es) : Brasil Banco(s) de Dados : Progress/Oracle

JPA Passo a Passo. Henrique Eduardo M. Oliveira henrique@voffice.com.br. Globalcode Open4Education

Sistemas Distribuídos Capítulo 4 - Aula 5

USANDO O PYTHON PARA ESCREVER PLUG-INS PARA O GIMP

Introdução. Configuração. Padrão POJO. Framework Pesistência de. Mapeamento Annotation. Objetos. Persistência. Java. Objetos. Prof.

NORMA TÉCNICA E PROCEDIMENTOS PARA REALIZAR ALTERAÇÕES NO BANCO DE DADOS CORPORATIVO

Série Rações Semanais JPA & Hibernate Rogério Araújo

LINHAS MESTRAS; FASES; DISCIPLINAS; PRINCÍPIOS E MELHORES PRÁTICAS.

Nº horas ESTRATÉGIAS RECURSOS AVALIAÇÃO

Arquiteturas para Sistemas Distribuídos I

Edições da característica do CallerID do CallManager

Técnicas de Programação para a Web. Luiz Cláudio Silva. Novembro de Apresentação

Árvores Parte 1. Aleardo Manacero Jr. DCCE/UNESP Grupo de Sistemas Paralelos e Distribuídos

BANCO DE DADOS WEB AULA 7. criação de tabelas. professor Luciano Roberto Rocha.

1. Importações Cordilheira

5 - Qual é a principal vantagem de desenvolvimento de código por pares:

Criando uma aplicação web

Arquitetura de Banco de Dados

JPA Com Hibernate. Paulo Ricardo Lisboa de Almeida. Dados Transientes e Relacionamentos. 1 Universidade Positivo

Atividades de Treinamento. Carregando programas na família GTI100. HI Tecnologia Indústria e Comércio Ltda. Documento de acesso Público

de rede são comumente utilizadas nos dias de hoje. Um dos grandes desafios para a tecnologia de redes sem fio no momento é o handoff vertical, onde

Aplicando Composição e Orquestração de Serviços na Organização de Sistemas

Rascunho Autor:Ivan Salvadori. JPA com Hibernate

Linguagens e Técnicas de Programação II

Geração de Nota Fiscal Eletrônica de Serviço (06085)

aumento de custos de armazenamento e acesso performance baixa incoerência de informações nas alterações de dados

4 Um processo para a elaboração de perguntas de questionários para a elicitação de requisitos de software

Lista de Exercícios Dissertativo

AULA 07 HIBERNATE. Ao término desse capítulo você terá aprendido: Fundamentos do MVC Estrutura dos pacotes no NetBeans

Assina S_Line Manual de Uso

Atualização de Software Guia do Usuário

Carlos S. Rodrigues Leonardo Lino Vieira Eric Felipe Barboza Antonio Vasconcellos

1 Manual de Utilização

Método Simplex Revisado

Nota Fiscal Eletrônica

Importação de Dados Raster no TerraView

CAGED Manual de Configuração Certificado Digital do Aplicativo CAGEDNET

Qualidade de Produto. Maria Cláudia F. P. Emer

e-nota G Módulo de Guarda da Nota Fiscal eletrônica

Microcontroladores e Microprocessadores. Conversão de Bases Prof. Samuel Cavalcante

Engenharia de Software

Oracle Database: Programação com PL/SQL

Introdução. Introdução a Sistemas de Banco de Dados. Introdução. Evolução. por Juliano Tonezer da Silva tonezer@(upf.tche.br, dinf.unisc.

Transcrição:

Introdução O principal foco da versão 5 do Java EE é a facilidade de uso. O novo Java EE é bem mais simples que sua versão anterior e suas novas APIs aumentam a produtividade dos desenvolvedores, exigindo menos esforço de codificação. Uma das principais novidades do Java EE 5 é a sua nova API de persistência. Há muito tempo esperada pela comunidade Java, a Java Persistence API (JPA) padroniza as operações de persistência sobre entidades Java, definindo uma especificação para mapeamento objeto-relacional Persistência e mapeamento O/R A tecnologia de banco de dados relacionais existe há décadas, e hoje os SGBDs são robustos e confiáveis. Os principais problemas relacionados ao armazenamento e recuperação de dados já foram solucionados, e o investimento das empresas nesses sistemas também é imenso, o que torna a sua utilização uma regra. O uso dos bancos de dados relacionais, no entanto, traz alguns inconvenientes ao programador de linguagens orientadas a objetos como Java. As tecnologias OO e relacional são bastante diferentes, e seu uso conjunto normalmente implica em enfatizar uma tecnologia em sacrifício da outra. Como os bancos de dados OO ainda estão muito menos disseminados que os bancos de dados relacionais, o desafio atual dos desenvolvedores é unir dois mundos completamente distintos, utilizando a tecnologia relacional para armazenar objetos. O armazenamento de objetos de uma aplicação é denominado persistência de objetos. Essa técnica permite que as instâncias existentes no sistema sejam armazenadas e posteriormente recuperadas, conservando-se o seu estado mesmo após a aplicação ter sido finalizada. Abordagens atuais de mapeamento Desde as suas primeiras versões, a plataforma Java oferece acesso a bancos de dados através da API JDBC, que trabalha no mesmo nível do banco, sendo o acesso às informações armazenadas feito através de comandos SQL. Em muitos aspectos, a JDBC é uma API de baixo nível, que muitas vezes exige do desenvolvedor o conhecimento das nuances do banco de dados. Apesar de ser uma maneira eficiente de acessar dados em SGBDs relacionais, e a opção que normalmente oferece melhor performance, a JDBC oferece uma abstração OO bastante limitada (trabalha-se com tabelas, registros e resultsets, ao invés de objetos). Para usar os recursos de bancos de dados relacionais em Java e ainda assim aproveitar os conceitos do paradigma OO, é necessário fazer o que se conhece como mapeamento objeto-relacional (ou simplesmente mapeamento O/R). No mapeamento O/R as classes e os atributos do sistema são mapeados para tabelas e Tópicos Avançados de Programação Página 1

campos/colunas, e a persistência é feita de forma transparente pela aplicação. Assim, objeto sem memória são armazenados no banco, e objetos do banco são trazidos para a memória sempre que necessário. Com paradigmas tão diferentes, diversas questões surgem durante o mapeamento: Como mapear herança? E agregação? Cada classe deve virar uma tabela? Como aproveitar os recursos do banco sem perder a abstração de objetos? Para suprir essas necessidades, surgiram diversos frameworks e tecnologias de persistência, a exemplo do Hibernate e do ibatis. Essas ferramentas facilitam o trabalho do desenvolvedor e aumentam sua produtividade, fornecendo poderosas APIs de manipulação de dados. Apesar de cada ferramenta possuir uma forma distinta de efetuar o mapeamento O/R, os conceitos são semelhantes e relativamente simples, baseando-se em POJOs (Plain Old Java Objects). O termo Plain Java Old Object (ou simplesmente POJO) foi criado por Martin Fowler, Rebecca Parsons e Josh MacKenzie em 2000. A tradução é algo como velho e bom objeto Java e refere-se a objetos/classes Java simples, não atrelados a ferramentas ou frameworks. A Java Persistence API Até o J2EE 1.4 a plataforma Java não possuía uma forma simples de mapear objetos no banco de dados. A única opção era a utilização de Entity Beans, que exigem um container EJB e possuem uma complexidade razoável1. Aplicações cuja arquitetura não envolvia EJBs precisavam utilizar ferramentas não padronizadas como o Hibernate para fazer a persistência, ou fazer a implementação de persistência manualmente. A Java Persistence API, definida na JSR-220 (Enterprise JavaBeans,Version 3.0), padroniza o mapeamento objeto-relacional na plataforma Java. Apesar de descrita na especificação do novo EJB, a JPA não depende de um container para funcionar, sendo possível usar e testar soluções apenas com o Java SE2. A JPA é uma especificação baseada no conceito de POJOs, que incorpora idéias de renomados frameworks de persistência para padronizar o mapeamento O/R em Java. A API oferece uma solução completa para mapeamento e persistência de objetos: Um modo declarativo de descrever mapeamentos O/R Uma linguagem de consulta Um conjunto de ferramentas para manipular entidades Em se tratando de um padrão do Java Community Process, a JPA traz diversos benefícios. O uso de um padrão para a persistência de objetos permite que diversos Tópicos Avançados de Programação Página 2

fabricantes trabalhem sobre os mesmos conceitos e que o desenvolvedor escolha a implementação de sua preferência. A padronização também traz outra importante vantagem: pode-se alternar entre implementações de fabricantes distintos, que estejam em conformidade com a JSR-220, sem nenhum esforço adicional. Dessa forma, uma aplicação codificada de acordo com o novo padrão irá funcionar com qualquer implementação da JPA, não havendo necessidade de se conhecer (a princípio) qual tecnologia será utilizada para essa implementação. Conceitos básicos Na JPA os objetos persistentes são denominados entidades (entities). Uma entidade é um objeto simples (POJO), que representa um conjunto de dados persistido no banco. Como entidades são definidas por classes Java comuns, sem relação com frameworks ou bibliotecas, elas podem ser abstratas ou herdar de outras classes, sem restrições. Um conceito importante é que as entidades possuem um identificador (descrito pela chave primária) e estado, sendo seu tempo de vida independente do tempo de vida da aplicação. Assim, aplicações distintas podem compartilhar a mesma entidade, que é referenciada através de seu identificador. Para que uma entidade se torne persistente é necessário associá-la a um persistence context (contexto de persistência), que fornece a conexão entre as instâncias e o banco de dados. A manipulação das entidades é feita, a partir desse contexto, por meio do entity manager (gerenciador de entidades), que é responsável por executar as operações básicas sobre a entidade (criação, atualização, exclusão, localização, consultas etc.). O entity manager na JPA é uma instância da interface javax.persistence.entitymanager. A implementação da JPA é feita por um persistence provider (provedor de persistência). O provedor define como as coisas funcionam, através da implementação de todas as interfaces definidas pela especificação da JPA. Dessa forma, cada provedor decide a maneira e o momento de carregar, atualizar e armazenar as entidades, assim como sincronizar os dados com o banco. As configurações utilizadas pelo provedor em uma determinada aplicação(conexão com o banco de dados, entidades que serão gerenciadas, tipo de transação etc.) são descritas em uma persistence unit, que é configurada num arquivo especial denominado persistence.xml. Mapeamento As classes e interfaces da JPA estão localizadas no pacote javax.persistence. A API faz uso intensivo de anotações ; por isso não é necessário criar descritores XML para cada uma das entidades da aplicação. Uma entidade é uma classe Java comum, rotulada através da anotação @Entity. Não é preciso implementar Tópicos Avançados de Programação Página 3

interfaces ou estender outras classes para tornar uma classe persistível ; a única exigência é que a classe da entidade possua um construtor sem parâmetros, pois a instanciação da classe é feita por reflexão. No código a seguir a classe Pessoa representa uma entidade. O atributo cpf é o identificador da entidade (chave primária), especificado através da anotação @Id: @Entity public class Pessoa { @Id private String cpf; } Grande parte da produtividade trazida pela JPA deve-se à utilização de valores default de mapeamento, que facilitam bastante o trabalho do desenvolvedor. Assim, o que não é definido explicitamente assume a configuração padrão da API. Por exemplo, por padrão a JPA considera o nome da entidade o mesmo nome da tabela no banco de dados e o nome da propriedade o mesmo nome da coluna. No código anterior, a entidade Pessoa será salva na tabela PESSOA e a propriedade cpf na coluna CPF. Caso seja necessário alterar a forma de mapeamento, devemse utilizar as anotações @Table e @Column, por exemplo: @Entity @Table(name= TB_PESSOA ) public class Pessoa { @Id @Column(name= DS_CPF) private String cpf; } Os dados de uma única entidade podem estar distribuídos em mais de uma tabela, e diversos tipos de relacionamentos entre entidades são possíveis. Os mais comuns são os de agregação (anotações @OneToOne, @OneToMany, @ManyToOne, @ManyToMany, etc.) e herança (anotação @Inheritance). Consultas A JPA oferece suporte a consultas estáticas e dinâmicas. A API fornece uma linguagem própria de consulta, que é uma extensão bastante poderosa da EJB QL (a linguagem de consultas do EJB). Essa linguagem pode ser usada como uma alternativa ao SQL, que também é suportado. As consultas suportam polimorfismo, o que significa que quando uma entidade é consultada, todas as entidades descendentes que atendam ao critério da consulta também são retornadas. A criação de consultas é feita através do EntityManager, que fornece métodos específicos para instanciar consultas estáticas e dinâmicas, além de permitir a execução das operações CRUD. Tópicos Avançados de Programação Página 4

As consultas estáticas possuem nomes e são descritas pela anotação @NamedQuery. Elas são definidas nas entidades correspondente se ficam précompiladas. Veja um exemplo de consulta estática para localizar uma pessoa pelo seu CPF: @NamedQuery(name = consultarporcpf, query = SELECT p FROM Pessoa p WHERE p.cpf = :cpf ) O EntityManager utiliza o nome da consulta para instanciá-la, o que é feito através do método createnamedquery(). Depois que a consulta é criada, basta setar os parâmetros e executá-la. A execução pode ser feita pelos métodos getsingleresult() ou getresultlist(), a depender do resultado esperado. Por exemplo, para localizar uma pessoa pelo CPF (supondo que o retorno será único), basta executar a consulta conforme o exemplo abaixo: Query consulta =manager.createnamedquery( consultarporcpf ); consulta.setparameter( cpf, 111.111.111-11 ); Pessoa pessoa = consulta.getsingleresult(); As consultas dinâmicas não possuem nome, e podem ser construídas em tempo de execução. A criação desse tipo de consulta é feito através do método createquery(): Query consulta = manager.createquery( SELECT p FROM Pessoa p WHERE p.cpf = :cpf ); Tópicos Avançados de Programação Página 5