Este artigo apresenta a evolução da Java Persistence API (JPA), solução de Mapeamento Objeto-Relacional padrão da plataforma Java EE. Por meio de algumas demonstrações, vamos analisar as novidades da especificação da JPA versão 2.1, que traz novas funcionalidades que aumentam o nível de flexibilidade no desenvolvimento de soluções e facilitam o uso de recursos oferecidos pelos Sistemas Gerenciadores de Banco de Dados.
A abordagem feita no artigo é útil para familiarizar o leitor com a evolução da especificação JPA, permitindo o conhecimento rápido e a utilização das novas funcionalidades incorporadas que tornam mais produtivo o desenvolvimento em Java envolvendo persistência de dados.
Grande parte das aplicações desenvolvidas, sejam estas simples ou complexas, compartilham um denominador comum, a informação. A informação criada e/ou manipulada pelas aplicações na maioria das vezes precisa ser armazenada para utilização no futuro. Alguns exemplos destas informações são: um cadastro preenchido em uma loja virtual, que é reaproveitado em todas as compras realizadas pelo cliente; ou os registros de transações bancárias, que são a base para a geração e conferência do extrato contendo a movimentação efetuada em uma conta.
Um meio comum para o armazenamento de informações são os SGBDs (Sistemas Gerenciadores de Banco de Dados). Os SGBDs armazenam informações em um modelo relacional que se baseia em conceitos como: tabelas, colunas, linhas, chaves primárias (coluna(s) com valor(es) que identificam unicamente uma linha em uma tabela) e chaves estrangeiras (coluna(s) com valor(es) que referenciam linhas da mesma ou de outras tabelas).
No entanto, as aplicações desenvolvidas em Java, diferentemente dos SGBDs, utilizam o modelo orientado a objetos para representar as informações. Este modelo aplica conceitos como classes, objetos, atributos, associações entre um ou mais objetos, métodos e herança.
Pelos conceitos descritos anteriormente podemos notar que o modelo relacional e o modelo orientado a objetos são incompatíveis entre si. Deste modo, para que exista interação entre eles é necessário um mecanismo intermediador, o ORM (Object-Relational Mapping). Este mecanismo provê a conversão das informações existentes em um modelo de dados relacional para o orientado a objetos e vice–versa. Esta conversão é possível através do mapeamento ORM, que descreve a correspondência entres esses dois modelos.
A JPA (Java Persistence API) é a solução ORM padrão para as plataformas Java SE e Java EE. Sua criação e consequentes atualizações efetuadas foram e são estabelecidas seguindo o mesmo procedimento de evolução das tecnologias da plataforma Java, através de especificações. Uma especificação é elaborada por meio de uma JSR (Java Specification Request), que consiste em uma proposta formal e estabelece quais e como os recursos serão oferecidos, além de determinar o comportamento esperado destes nas implementações. Com a aprovação da JSR por um comitê executivo, a nova versão da especificação é liberada.
Em consequência da aprovação da JSR 338, a versão 2.1 da especificação JPA foi liberada em Maio de 2013. Esta nova versão da API é o tema central deste artigo, e vamos abordar este assunto com uma breve descrição da motivação para criação da JPA, seguindo com um resumo das atualizações realizadas na versão 2.0, e através de um conteúdo mais amplo, a apresentação e demonstração das novidades incorporadas na especificação atual, que corresponde à versão 2.1.
A evolução da JPA
A motivação para criação da JPA surgiu da necessidade de simplificar o modelo de persistência disponível na plataforma EJB 2.x, o CMP. Os recursos oferecidos pelo CMP eram altamente acoplados e dependentes do ambiente oferecido pelo container. Esta dependência implicava no desenvolvimento de uma quantidade de código considerável que era requerida para o funcionamento da persistência, a saber:
· Criação das interfaces de componentes que definem os métodos de negócio para manipulação das informações persistidas. Estas interfaces possibilitam o acesso remoto, estendendo a interface javax.ejb.EJBObject, e o acesso local, estendendo a interface javax.ejb.EJBLocalObject;
· Criação das interfaces home, que devem estender as interfaces javax.ejb.EJBHome para acesso remoto e javax.ejb.EJBLocalHome para acesso local. Estas interfaces são utilizadas pelo container como fábrica na criação dos componentes que irão possibilitar o acesso às informações persistidas;
· Implementação abstrata da interface javax.ejb.EntityBean, que é utilizada pelo container e permite o acesso aos dados persistidos;
· Criação do arquivo ejb-jar.xml (descritor de deploy), contendo o mapeamento das propriedades das entidades (javax.ejb.EntityBean) e a descrição das consultas para obtenção e manipulação das informações persistidas.
JPA 1.0
Com a proposta de substituir este mecanismo de persistência “dependente” oferecido pelo CMP e tendo como base as soluções oferecidas por alguns frameworks de ORM disponíveis na época, a versão 1.0 da especificação JPA foi elaborada e integrou a JSR 220, liberada em Maio de 2006. Esta JSR definiu a versão 3.0 da tecnologia EJB (Enterprise Java Beans), que assim como a JPA, faz parte da plataforma Java EE 5. Nesta primeira versão da especificação estão inclusos os principais recursos da API, a saber:
· Regras e mecanismos para o mapeamento objeto-relacional, disponibilizando no pacote javax.persistence as anotações para uso nas entidades, e também fornecendo um esquema (XSD) para viabilizar o mapeamento via descritor XML;
· A definição da API EntityManager, contendo as operações básicas para persistência e recuperação de informações por meio das entidades;
· Uma linguagem para consulta e manipulação das entidades, a JPQL (Java Persistence Query Language);
· Conjunto de Listeners e Callbacks, para interceptação e tratamento de eventos ocorridos durante a manipulação das entidades.
JPA 2.0
A versão 2.0 da JPA foi concebida por meio da JSR 317, que aborda unicamente a evolução desta tecnologia, sendo liberada em Dezembro de 2009. Apesar desta separação em uma JSR própria, a API continuou a fazer parte da plataforma Java EE, na época na versão 6. Esta versão da JPA foi produzida com o propósito de atualizar a API em relação à versão 1.0, incluindo melhorias e novos recursos solicitados pela comunidade Java. Entre os aspectos introduzidos pela versão 2.0, destacam-se:
· Inclusão da API de Criteria, permitindo a construção de consultas através de recursos de orientação a objetos, uma alternativa à linguagem JPQL;
· Possibilidade do mapeamento de coleções de objetos simples, como Strings, Enumerações e objetos acoplados (Embedded);
· Tratamento de relacionamentos entre entidades nas operações de exclusão, com a remoção de dependências órfãs;
· Inclusão da API para cache de entidades.
JPA 2.1
A especificação da JPA 2.1, que no momento da escrita deste artigo é a versão mais atual da API, foi liberada em Maio de 2013 através da JSR 338. Esta nova especificação, que compõe a lista de tecnologias da plataforma Java EE 7, mantém o foco na atualização da API JPA, incorporando melhorias e novos recursos solicitados pela comunidade. A introdução e a demonstração de algumas das novidades da JPA versão 2.1 são a motivação e o assunto principal deste artigo, que irá avaliar os seguintes:
· Recurso para geração do esquema de banco de dados (Schema Generation);
· Expansão das alternativas de construção de resultados de consultas nativas com a utilização de tipos (classes) não persistidos, através da nova funcionalidade Constructor Result;
· Inclusão de suporte a Stored Procedures;
· Adição do mecanismo que permite a conversão entre os tipos utilizados nos atributos das entidades e os tipos das colunas referentes a estes atributos nas tabelas do banco de dados, os Converters;
· Evolução da API de Criteria, adicionando suporte à atualização e exclusão de dados em lote (bulk update/delete);
· Possibilidade de realização de cast explícito (downcasting) em consultas JPQL e Criteria com o uso do novo operador TREAT, aplicável em atributos de relacionamentos entre entidades que fazem parte de uma hierarquia de classes.
O modelo de classes para os exemplos
Para que a apresentação da nova versão da API JPA seja mais completa e não fique somente na suposição, foi desenvolvido um modelo de classes simples, no qual foi aplicado o mapeamento ORM por meio de anotações JPA. Este modelo de classes será usado como base para a apresentação e demonstração das novas funcionalidades da JPA.
Os trechos de código exibidos nas listagens deste artigo foram extraídos do desenvolvimento de exemplos com o uso da API JPA 2.1. Estes exemplos foram construídos com as tecnologias Java 7, a implementação de referência da JPA 2.1 fornecida pelo projeto EclipseLink (versão 2.5) e o banco de dados MySQL 5.5.31.
O modelo de classes, cuja visão geral está disponível na Figura 1, é composto pelas seguintes classes:
· br.com.devmedia.jm.Usuario: Classe que representa um usuário qualquer, contendo alguns atributos básicos e uma coleção de endereços;
· br.com.devmedia.jm.Endereco: Classe que corresponde a um endereço comum, que está associado a um usuário;
· br.com.devmedia.jm.EnderecoComercial: Esta é uma subclasse de Endereco e representa uma categoria de endereço comercial, tendo como atributo específico a disponibilidade (de horário) do usuário neste endereço, ou seja, o intervalo de tempo no qual o usuário estará presente neste local;
· br.com.devmedia.jm.TipoLogradouro: Enumeração que representa o domínio dos tipos de logradouros utilizados nos endereços;
· br.com.devmedia.jm.Sexo: Enumeração que representa o ...
Confira outros conteúdos:
Introdução ao JDBC
Novidades do Java
Teste unitário com JUnit
Black November
Desconto exclusivo para as primeiras 200 matrículas!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 54,90
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 54,90 /mês
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.