1. Conceitos Gerais de Persistência
Imagine um usuário fazendo uso de uma ap
licação, por exemplo, um sistema para controlar suas finanças. Ele passa a fornecer como dados de entrada todos os seus gastos mensais para que a aplicação lhe gere, por exemplo, gráficos nos quais ele possa avaliar seus gastos. Finalizada, a sua análise financeira, o usuário resolve desligar o computador em que a aplicação se enc
ontra. Imagine agora que o usuário teve novos gastos, voltou a ligar o computador, acessou novamente o sistema de finanças e que gostaria de realizar novas
análises com todos os seus gastos acumulados. Se a aplicação não armazenar, de alguma forma, os primeiros gastos fornecidos, o usuário teria que informá-los novamente e em seguida, acrescentar os novos gastos para fazer a nova análise, causando grande trabalho e o sistema não sendo eficiente. Para resolver esse tipo de problema, uma solução seri
a armazenar (persistir) os dados lançados a cada vez pelo usuário em um banco de dados relacional, utilizando SQL (Structured Query Language).
2. Mapeamento Objeto Relacional
Seção Escrita Por: Juliano Rafael Sena de Araújo
Por vários anos os projetos de ap
licações corporativas tiveram uma forte necessidade de se otimizar a comunicação da lógica de negócio com a base de dados. Essa necessidade ganhou mais intensidade com o crescimento dessas aplicações, crescimento esse, tanto em requisitos (funcionalidade) quanto em
volume de dados armazenados em seu banco de dados.
Na década de 80, foram criados os bancos de dados rel
acionais (BDR) que substituíram as bases de dados de arquivos. Para esse tipo de base de dados foi criada uma linguagem, a SQL. Essa linguagem foi to
da baseada na lógica relacional e por isso contava com diversas otimizações em suas tarefas se comparadas com as outras tecnologias existentes. A partir de então foi diminuído o tempo gasto para
as operações de persistência, mesmo com um grande volume de dados. Entretanto, essa linguagem não propiciava aos desenvolvedores uma facilidade para que a produtividade fosse aumentada.
Uma solução que surgiu no início da década de 90 foi à criação de um modelo de banco de dados baseado no conceito de orientação a objetos. Este modelo visav
a facilitar, para os desenvolvedores, a implementação da camada de
persistência da aplicação, pois eles já estavam familiarizados com o paradigma de orientação a o
bjetos, consequentemente, a produtividade certament
e aumentaria. Na prática, esse modelo de dados não foi utilizado em grandes aplicações, visto que elas tinham um volume de dados muito grande e esse modelo era ineficiente em termos de tempo de resposta, pois ao contrário dos bancos de dados relacionai
s, eles não tinham um modelo matemático que facilitasse as suas operações de persistências.
Então a solução foi usar os BDR e desenvolver ferramentas para que o seu uso seja facilitado. Uma dessas ferramentas é o framework Hibernate que usa o conceito d
e mapeamento objeto relacional (MOR).
As subseções seguintes apresentam os conceitos relacionados ao mapeamento objeto relacional.
2.1 Mapeamento objeto relacional
Como foi descrito anteriormente, mapeamento objeto relacional funciona com a transformação dos dados de um objeto em uma linha de uma tabela de um banco de dados, ou de forma inversa, com a transformação de uma linha da tabela em um objeto da aplicação. Abordando essa idéia, alguns problemas poderão existir, como, se um obje
to tiver uma coleção de outros objetos. Nas próximas
subseções serão abordados os alguns
tipos de mapeamentos básicos.

2.1.1 Mapeamento de um objeto com tipos primitivos
Esse é o mapeamento mais simples, o
nde um objeto tem apenas tipos de dados básicos. Vale salientar que entendesse por tipos básicos aqueles que possuem um correspondente em SQL, ou seja, o tipo String da linguagem Java é considerado um tipo básico, pois ele possui um correspondente em SQL.
Na Figura 1, observa-se o mapeamento de três objetos do tipo Veiculo na tabela de um banco de dados. Caso a aplicação deseje saber o veículo da cor vermelha, por exemplo, então o objeto que tem o Pálio como modelo é retornado.

2.1.2 Mapeamento de objetos que contém uma coleção de objetos
Esse tipo de mapeamento é quando um objeto possui um conjunto de outros objetos. Para obter esse conceito é necessário adicionar, ao exemplo da Figura 1, uma nova classe chamada de Fabricante que conterá as informações: nome, que armazenará o nome desse fabricante e o veiculos, que conterá o conjunto de veículos do fabricante (telefone e endereco não são informações relevantes no exemplo). Faz-se necessário a adição de uma informação na classe Veiculo chamada de fabricante, como mostrado na Figura 2.
O atributo fabricante adicionado em Veiculo é simplesmente para relacionar um veículo ao seu fabricante, enquanto o veiculos de Fabricante referencia a classe Veiculo.
Como foram realizadas mudanças no domínio do exemplo orientado a objetos, faz-se necessária uma alteração no modelo do banco de dados. Primeiramente, o vínculo que foi realizado entre um fabricante e um veículo deverá ser implementado através de uma chave estrangeira (referência a uma outra tabela, pois em BDR não existe o conceito de coleções) que se localizará na tabela VEICULO, caracterizando o mapeamento 1 para N, ou seja, um veículo possui apenas um fabricante e um fabricante possui vários (N) veículos. Essa chave estrangeira será realizada entre a informação nome da classe Fabricante e o atributo fabricante da classe Veiculo.

Para um melhor entendimento, a Figura 3 mostra o mapeamento dos objetos para as tabelas no BDR. Nele observa-se que cada veículo está associado com um fabricante, isso implica dizer que na tabela de VEICULO existe uma referência para a tabela FABRICANTE. Essa associação é feita através da coluna fabricante da tabela VEICULO. Pensando em termos práticos, quando um veículo for inserido no banco de dados, ele será ligado ao seu respectivo fabricante, no momento da inserção.
Para recuperar os veículos inseridos o desenvolvedor terá que implementar uma busca que retorne além das informações do veículo as informações do seu fabricante, isso poderá ser realizado fazendo a seguinte consulta SQL: SELECT * FROM fabricante WHERE nome = , onde é o nome do fabricante que está na tabela VEICULO, por exemplo, caso a aplicação deseje as informações do veículo do modelo Pálio, então para se buscar o fabricante a seguinte consulta será realizada: SELECT * FROM fabricante WHERE nome = 'Fiat'.
Utilizando a mesma idéia, os fabricantes são buscados; a única diferença é que agora a consulta que buscará os veículos associados com o fabricante retornará uma coleção de veículos (SELECT * FROM veiculo WHERE fabricante = ).
Esse tipo de mapeamento é muito utilizado em aplicações em que os objetos fazem muita referência a outros objetos.
Fonte:
Hibernate com Anotações. Por: Raphaela Galhardo Fernandes e Gleydson de A. Ferreira Lima