Hibernate Anotations Fabio Luiz Oenning da Costa¹, Ricardo Minigucci¹ Universidade Paranaense (Unipar) Paranavaí – PR – Brasil [email protected] [email protected] Resumo. Este artigo apresenta o Hibernate Annotations que é um framework, que se destaca entre outros detalhes por alterar o banco de dados para outro SGBD e para o mapeamento objeto/relacional. O mapeamento dos objetos foi simplificado devido à criação do Hibernate Annotations de forma a reduzir a necessidade de criação de um arquivo especifico que possibilitava o mapeamento de cada tabela utilizada pelo banco de dados, com a criação das anotações basta que seja indicada a anotação necessitada pelo desenvolvedor, para que o pacote seja chamado e descarte a necessidade de criação de um arquivo de mapeamento, assim esperamos apresentar essa abordagem neste artigo. 1. Introdução Linguagens de programação como Java, cada vez mais tem seus conceitos de orientação a objeto, tratados de forma distribuída, pois bancos de dados orientados a objeto tem certa limitação se comparando aos relacionais, isso se deve a falta de robustez e eficiência, que são ocasionados pela manipulação nos formatos dos objetos. O Hibernate Anotations foi criado para simplificar a comunicação entre um banco de dados relacional e o modelo de aplicação de objetos por meio de arquivos XML, esse arquivo é responsável por fazer o mapeamento para as tabelas do banco de dados, se não tivéssemos esse pacote, seria necessário à criação de arquivos para cada tabela do banco de dados utilizada. 2. Metodologia Para realizar este trabalho foi preciso realizar pesquisas em apostilas, artigos e sites da Internet e livros na web. 3. Desenvolvimento Este capitulo apresenta o hibernate e algumas anotations. 3.1. Hibernate É um Framework gratuito utilizado para mapeamento de objeto/relacional, introduzi-o sua linguagem própria de query (Hibernate Query Language). isso é, converte os objetos definidos pelo programador em dados distintos no banco de dados, assim o programador minimiza consideravelmente a quantidade de códigos de acessos que ele terá que desenvolver para o banco de dados e SQL [Introdução ao Hibernate 2014]. 3.2. Vantagens do Hibernate Ao utilizar o código SQL dentro de uma aplicação Java, pode complicar o mapeamento de classes do banco de dados relacional, tendo em vista o problema de independência de plataforma de banco de dados, esse problema pode tornar muito complicado relacionar os dados. O Hibernate executa esse papel, distribui o código SQL dentro da nossa aplicação e dessa forma permiti escolher o tipo de banco de dados enquanto o programa está em execução, permitindo assim alterar sua base sem que seja necessária a alteração do código Java. 3.3. Mapeamento Objeto Relacional A maneira mais utilizada no armazenamento de dados é utilizando um banco de dados relacional, mas devido ao rápido desenvolvimento que vem passando as linguagens orientadas a objeto, é necessária à comunicação entre bancos de dados relacionais de forma mais simples e funcional. Para que essa interação aconteça, se torna necessária à conversão de objetos em tabelas e tabelas em objetos, e em alguns casos os dados não são compatíveis (variação entre os tipos de linguagem e bancos de dados). O mapeamento objeto relacional faz a conversão entre objetos e linhas de tabelas. 3.4. Annotations As Anotations foram implementadas no Java 5, e desde então, a maioria das ferramentas passou a utilizar essas annotations, que são interfaces aplicadas no nível da classe, e de variáveis e definem os meta-dados relacionados á própria classe, essas annotations foram adotadas pelo Hibernate e as integrou á parte essencial do framework [Introdução ao Hibernate 2014]. 3.5. Como Utilizar o Hibernate Annotations Para utilizar o Hibernate Annotations, é preciso fazer o download de sua versão atual 4.3.6 que está no seguinte link http://hibernate.org/orm/. 3.6. Annotations do Hibernate Session: O objeto Session é aquele que possibilita a comunicação entre a aplicação e a persistência, através de uma conexão JDBC. Ele é um objeto leve de ser criado, não deve ter tempo de vida por toda a aplicação e não é threadsafe. Um objeto Session possui um cache local de objetos recuperados na sessão. Com ele é possível criar, remover, atualizar e recuperar objetos persistentes. SessionFactory: Esse objeto mantém o mapeamento objeto relacional em memória permite a criação de objetos Session, a partir dos quais os dados são acessados, também denominado como fábrica de objetos Sessions. Um objeto SessionFactory é threadsafe, porém deve existir apenas uma instância dele na aplicação, pois é um objeto muito pesado para ser criado várias vezes [Hibernate com Anotações 2007]. Configration: Um objeto Configuration é utilizado para fazer as configurações de inicialização do Hibernate. Com ele, definem-se diversas configurações, como por exemplo: o driver do banco de dados a ser utilizado, o dialeto, o usuário e senha do banco, entre outras. É a partir de uma instância desse objeto que se indica como os mapeamentos entre classes e tabelas de banco de dados devem ser feitos [Hibernate com Anotações 2007]. Transaction: A Interface Transaction é utilizado para representar uma unidade indivisível de uma operação de manipulação de dados. autilização dessa interface nas aplicações que usam Hibernate é opcional [Persistência de dados com Java e Hibernate Annotations 2009]. Interfaces Criteria e Query: As interfaces Criteria e Query são utilizadas para realizar as consultas no banco de dados [Hibernate com Anotações 2007]. One-to-One: A anotação One-to-One é utilizado para associar duas entidades, onde uma não é componente da outra, ao contrário dessa definição em uma associação One-toOne também podemos ter um relacionamento bidirecional. One-to-Many: A anotação @OneToMany pode ser aplicada para um campo ou propriedade de uma coleção ou um array representando o "many" da associação. @JoinColumn: Essa anotação é utilizada para nomearmos a coluna que possui a chaveestrangeira requerida pela associação. Caso ela não seja nomeada essa coluna ira utilizar o nome do campo. @TableGenerator: A anotação @TableGenerator sua utilidade é semelhante à anotação @SequenceGenerator, no entanto, a anotação @TableGenerator manipula uma tabela padrão no banco de dados para obter valores de chaves primárias, ao invés de usar um objeto de sequência específica de vendedor. 3.7. Arquitetura do Hibernate A arquitetura do Hibernate é formada por um conjunto de interfaces, A camada de negócio fica acima da camada de persistência por atuar como uma cliente da camada de persistência, as interfaces são classificadas como: • Session, Transaction e Query; Essas Interfaces são responsáveis por executar operações de criação, deleção, consulta e atualização no banco de dados. • Configuration; Essa Interface é utilizada pela aplicação para configurar o Hibernate. • Interceptor, Lifecycle e Validatable; Essas Interfaces são as responsáveis por realizar a interação entre os eventos do Hibernate e a aplicação. • UserType, CompositeUserType e IdentifierGenerator; Essas Interfaces que permitem a extensão das funcionalidades de mapeamento do Hibernate. O Hibernate interage com as APIs existentes no Java: JTA, JNDI e JDBC. Abaixo a figura-1 representa as principais interfaces que são: Session, SessionFactory, Transaction, Query e Configuration [Hibernate com Anotações 2007]. Figura 1 - Representa a Arquitetura do Hibernate 4. Considerações Finais A ferramenta Hibernate é open-source e uma das mais usadas na atualidade para o mapeamento de banco de dados, tornado por esses motivos uma das preferidas de muitos desenvolvedores. Talvez podendo indicar a principal característica, a eliminação do trabalho repetitivo e tendencioso e a substituição pela orientação a objeto, eliminando o paradigma estruturado. Dentre todo esse desenvolvimento, podemos indicar uma desvantagem na utilização desse framework uma relativa perca de desempenho, apesar que foi identificado que em alguns casos, essa perca não ocorre. Sistemas que tem sua parte lógica da aplicação na sua base de dados ou fazem um uso extensivo de stored e triggers, podem não ter um bom desenvolvimento e consequentemente tornar seu desempenho decepcionante, apesar de todos os detalhes. 5. Referencias Fernandes Raphaela Galhardo. Gleydson de A. Ferreira Lima. (2007) Hibernate com Anotações. Disponivel em:<http://www.futurepages.org/wiki/lib/exe/fetch.php? media=quickstart:hibernate_anotacoes.pdf> Acesso em: 10/04/2014. Ortoncelli André Roberto, Carlos Lazarin Jóia Alberto. (2009) Persistência de dados com Java e Hibernate Annotations. Disponivel em: < http://www.google.com.br/url? sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CB0QFjAA&url=http%3A%2F%2 Fwww.atualizado.com.br%2Fsemfronteiras%2Findex.php%3Foption%3Dcom_docman %26task%3Ddoc_download%26gid%3D8%26%26Itemid%3D66&ei=75QAVP-2GOr msASuvYGAAw&usg=AFQjCNEBIe7l3Wy7j4pqNv76W4fgvNVARQ > Acesso em: 26/08/2014. Apostila Java para Desenvolvimento Web, Capitulo 14. Disponivel em: <http://www.caelum.com.br/apostila-java-web/uma-introducao-pratica-ao-jpa-comhibernate/> Acesso em: 26/08/2014. Prates Rubens. (2014) Introdução ao Hibernate. Tradução Lúcia A. Kinoshita. ed. Novatec Editora LTDA.