Recursos especiais neste artigo:
Contém nota Quickupdate, Artigo no estilo Solução Completa
O artigo trata de algumas das novas funcionalidades do Hibernate 4, framework de mapeamento objeto/relacional Java mais popular atualmente. Dentre as novidades trazidas pelas versões 4.0, 4.1 e a atual 4.2 CR (Candidate Release), o artigo mostra por meio de uma aplicação de exemplo o registro central de serviços do Hibernate, o suporte a bancos de dados multi-inquilinos e a utilização de identificadores naturais.
Em que
situação o tema é
útil
O tema é útil para todo
desenvolvedor que trabalha com o desenvolvimento de aplicações Java cuja persistência
é feita em bancos de dados relacionais, como Oracle, Microsoft SQL Server, IBM
DB2, PostgreSQL, MySQL, dentre outros. Em especial, desenvolvedores que
precisam implementar aplicações com arquitetura multi-inquilinos (muito comum
em soluções SaaS para computação em nuvem) ou que realizam frequentemente
consultas ao banco de dados filtrando por identificadores naturais (atributos
únicos que, porém, não compõem a chave primária da entidade em questão) poderão
ver na prática como utilizar as novas funcionalidades do Hibernate para estas
situações.
O Hibernate é o framework de mapeamento objeto/relacional mais conhecido e utilizado para a plataforma Java atualmente. Foi também um dos pioneiros desse tipo de solução de persistência e foi utilizado como base para a definição do padrão Java Persistence API 2.0, dada a sua popularidade. Veja a Nota do DevMan 1.
Mapeamento Objeto/Relacional (em inglês: object/relational mapping, ou ORM) é uma solução para persistência de objetos em bases de dados relacionais. Estes dois paradigmas são incompatíveis: na orientação a objetos, os dados são armazenados como atributos de objetos ligados entre si formando um grafo; já em bases de dados relacionais, dados são armazenados em tabelas com linhas e colunas, associadas umas às outras por chaves primárias e estrangeiras. Frameworks ORM transformam os dados de uma representação para a outra utilizando meta-dados e oferecendo APIs e linguagens de consulta para realizar operações de persistência.
Em seus muitos anos de existência, o projeto cresceu e lançou diversos subprojetos como o Hibernate Shards (para persistência em bancos de dados distribuídos), Hibernate Search (trazendo funcionalidades mais avançadas de pesquisa textual para o banco de dados), Hibernate Validator (implementação de referência da JSR 303 – Bean Validation), Hibernate OGM (para soluções NoSQL), dentre outras. Neste artigo, abordaremos o núcleo do framework, que na época da criação dos subprojetos foi chamado de Hibernate Core, mas que hoje é conhecido como Hibernate ORM. Utilizaremos todos estes nomes (Hibernate, Hibernate Core e Hibernate ORM) para fazer referência ao mesmo framework.
Em dezembro de 2011, a JBoss (empresa que coordena o desenvolvimento do framework) lançou a versão 4.0 do Hibernate ORM, registrando um salto da versão anterior, a 3.6.9. Em fevereiro de 2012 registrou-se um avanço um pouco menor com o lançamento da versão 4.1. No final de janeiro, foi publicada a Candidate Release (CR) da versão 4.2 do núcleo do framework (veja a Nota do DevMan 2). Apesar de muitos usuários ávidos por novas funcionalidades já utilizarem o Hibernate 4.x há meses, os mais conservadores provavelmente se ativeram a alguma versão da família 3.x até que as novas versões estivessem mais estáveis.
Versões Candidate Release representam distribuições de um framework ou aplicação que, segundo os seus próprios desenvolvedores, encontram-se quase prontas para uso em ambientes de produção. Dentro de uma numeração qualquer (ex.: 4.2) podem ser lançadas algumas versões CR (CR1, CR2, etc.) até que o software seja considerado estável (nenhuma falha séria não corrigida encontra-se reportada) e, então, é lançada a versão final daquela numeração.
Em todas estas evoluções, desde a 4.0 há mais de um ano atrás até a mais recente CR do Hibernate ORM 4.2, algumas novas funcionalidades foram adicionadas ao framework em relação à versão 3.6. De acordo com os próprios desenvolvedores, em seu blog (veja Links), destacam-se as seguintes:
· Uma nova forma de obtenção da SessionFactory, após unificação dos serviços já existentes no framework em um registro único;
· Adequação do framework à plataforma OSGi (veja Links), dividindo as classes em cada um de seus pacotes em três categorias: públicas, internas e SPI (Service Provider Interface, ou Interface Provedora de Serviços);
· Suporte a bancos de dados multi-inquilinos (multi-tenant databases). Bancos de dados deste tipo armazenam dados de diferentes organizações (inquilinos) na mesma instância, gerenciando o acesso de cada um aos seus dados;
· Uma nova API para recuperação de objetos utilizando identificadores naturais. Tais identificadores são aqueles que fazem parte do domínio do problema e não foram adicionados artificialmente somente por questões de persistência;
· Verificação de objetos sujos (dirty checking) personalizável pelo cliente. Em outras palavras, permite que o próprio usuário do framework especifique quando um objeto deve ser considerado sujo (ou seja, foi modificado em relação aos dados do banco) ou não;
· Internacionalização das mensagens de log utilizando JBoss Logging;
· Uso da JDK 1.6 e JDBC 4 como base para o desenvolvimento.
Neste artigo, apresentaremos por meio de exemplos algumas das funcionalidades listadas acima. Começaremos, no entanto, com instruções de download e “instalação” do framework.
Download e Instalação
O Hibernate ORM pode ser obtido no site oficial do framework (veja Links), na seção Downloads. Ele é distribuído em duas formas: pacotes de distribuição contendo binários, fontes e documentação ou por meio de um repositório de artefatos Maven.
O Maven (veja Links) é uma ferramenta de gerência de projetos de software que permite a um desenvolvedor indicar as dependências de um projeto (por exemplo, o framework Hibernate) e confiar à ferramenta a obtenção dos arquivos JAR necessários, incluindo qualquer dependência transitiva, de repositórios na Internet. Para o leitor interessado, o assunto foi abordado na Java Magazine 101.
No primeiro caso, a distribuição em um pacote (ZIP ou TGZ) quando descompactada provê todos os arquivos necessários para uso do framework na pasta lib. Esta pasta é ainda subdividida em quatro pastas:
· lib/required: JARs que são obrigatórios para uso do Hibernate. Caso você esteja configurando o classpath do seu projeto manualmente, estes são os arquivos a serem adicionados para utilização do framework;
· lib/jpa: o JAR presente neste diretório contém as classes que implementam o suporte do Hibernate ao padrão JPA (Java Persistence API), caso o desenvolvedor prefira utilizar esta interface padrão ao invés da API específica do framework;
· lib/envers: esta pasta contém o framework de auditoria de entidades JBoss Envers (veja Links). Tal framework registra o histórico de modificações em determinados atributos de entidades persistentes para auditoria futura;
· lib/optional: esta pasta contém JARs relativos a funcionalidades opcionais do framework, como utilização do pool de conexões C3P0 ou do cache ehcache ao invés das soluções utilizadas por padrão caso nenhuma configuração específica seja feita (tais configurações estão fora do escopo deste artigo).
...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.