Mapeamento Objeto-Relacional (MOR) utilizando anotações para descrever os metadados necessários. Nesse artigo serão usadas diversas anotações da especificação JPA que o Hibernate implementa e algumas classes providas pelo Hibernate para que a persistência e recuperação dos dados seja tão fácil quanto o mapeamento das classes.
Para que serve:
Conhecer um framework de mapeamento de fácil aprendizado e utilização para diminuir o tempo gasto com a persistência e recuperação de objetos em um banco de dados relacional.
Em que situação o tema é útil:
É útil no desenvolvimento de aplicações de qualquer natureza, onde o desenvolvedor não queira perder muito tempo escrevendo códigos para a persistência e recuperação de seus objetos em um banco de dados relacional.
Resumo DevMan:
Neste artigo vimos como utilizar o framework Hibernate Annotations como uma implementação da especificação JPA para realizar o mapeamento objeto-relacional através de anotações. Utilizando o escopo de uma aplicação para uma locadora de DVDs, mapeamos as tabelas do banco de dados em classes através de anotações nestas e em seus atributos. Uma vez que as classes e seus atributos estão anotados, utilizamos apenas o objeto Session para persistir e recuperar os objetos do banco de dados.
Desde que surgiu o Hibernate para ser uma ponte entre a orientação a objetos e a persistência de dados em bancos de dados relacionais, tudo o que o desenvolvedor precisa fazer é descrever suas classes com alguns metadados para poder se focar no desenvolvimento da aplicação (regras de negócio). Assim, sem se preocupar muito com a persistência de seus objetos em bancos de dados o desenvolvedor consegue aumentar sua produtividade.
Durante um bom tempo os metadados foram descritos através de XML (e são até hoje). Para cada classe que seria persistida no banco de dados era criado um novo XML explicando como o Hibernate deveria realizar o mapeamento entre atributos da classe e colunas da tabela.
Atualmente este não é mais o único modo de descrever os metadados, existe também o Hibernate Annotations, projeto que provê a descrição dos metadados através de anotações. Deste modo, ao invés de um arquivo XML para cada classe, os metadados podem ser anotados na própria classe e em seus atributos, facilitando ainda mais o processo de mapeamento.
Nesse artigo serão apresentados os conceitos necessários para entender como utilizar o framework Hibernate para persistir as classes Java em bancos de dados relacionais apenas com a descrição de metadados providos por anotações, utilizando, para isso, a IDE NetBeans 6.9.1 e o banco de dados MySQL.
Hibernate e JPA
Algum tempo depois do Hibernate fazer sucesso entre os desenvolvedores, a Sun reconheceu que o mapeamento objeto-relacional (para saber mais veja o quadro “O que é Mapeamento Objeto-Relacional?”) era algo necessário no desenvolvimento de aplicações e criou a especificação JPA (Java Persistence API) baseando-se nas funcionalidades que o Hibernate já havia implementado.
Como a Sun tinha maior alcance e influência sobre os desenvolvedores do que os criadores do Hibernate, foi natural que a JPA ficasse conhecida rapidamente. Após o lançamento da especificação os criadores do Hibernate a implementaram para manter o framework compatível com as outras especificações da Java EE (EJB, JSF, etc.) e os outros frameworks que utilizam a JPA.
Esta é uma situação que gera grandes confusões e dúvidas nos desenvolvedores: apesar do Hibernate ter surgido antes da JPA e ter sido utilizado como referência para a sua especificação, ele também a implementa, ou seja, pode ser utilizado como um framework independente ou como uma implementação da JPA.
Para empregar o Hibernate como implementação da JPA deve-se utilizar as anotações e classes que se encontram no pacote javax.persistence.*.
Mapeamento Objeto-Relacional (MOR ou ORM do inglês Object-Relational Mapping) é uma técnica utilizada para diminuir o tempo que um desenvolvedor leva para persistir objetos em bancos de dados relacionais. As tabelas do banco de dados são representadas através de classes e os registros das tabelas são objetos (instâncias das classes).
Utilizando essa técnica o desenvolvedor não precisa se preocupar tanto com os comandos SQL para as operações CRUD (Create, Read, Update and Delete), pois a própria ferramenta que implementa essa técnica deverá se preocupar com tais comandos.
Para aplicar a técnica de MOR, os atributos da classe devem representar colunas na tabela do banco de dados, porém as tabelas e classes não precisam ser idênticas, pode existir um atributo na classe que não esteja diretamente relacionado com a tabela do banco de dados. Exemplo: em uma tabela de aluguel de carros pode existir a data do aluguel e a data da devolução. A classe que representará a tabela pode ter o atributo ...