Você está aqui: Hibernate ::: Dicas & Truques ::: Hibernate Annotations (Anotações Hibernate) |
|||||||
Aprenda a usar Annotations no Hibernate 3Quantidade de visualizações: 10649 vezes |
|||||||
Quando estamos iniciando o estudo do Hibernate é comum definirmos o mapeamento entre a classe Java e sua tabela correspondente no banco de dados usando um arquivo XML. Assim, uma classe Cliente seria mapeada para uma tabela clientes usando um arquivo de mapeamento chamado cliente.hbm.xml. Porém, à medida que progredimos podemos tirar proveito de uma abordagem mais elegante disponível a partir do Java 5. Este recurso é conhecido como anotações (Annotations) e usado diretamente no código fonte das classes Java. Uma das vantagens do uso de Annotations é que as ferramentas de desenvolvimento tais como Eclipse e Netbeans fornecem recurso de auto-completar para o código e formatação de sintáxe, o que agiliza muito nosso trabalho de desenvolvimento. O Hibernate Annotations também suporta as novas especificações de persistência do EJB 3 (Enterprise Java Beans). Estas especificações objetivam fornecer um mecanisco de persistência padronizado para o Java. Enquanto o Hibernate 3 fornece algumas extensões a mais, podemos nos virar com os padrões e codificar a camada de persistência do Hibernate usando o modelo de programação do EJB 3. Mas, é preciso entender os cenários nos quais o uso do Hibernate Annotations é bem-vindo. Suponhamos que você esteja migrando de uma ambiente Hibernate 2 para um ambiente Hibernate 3. É claro que você já terá todos os arquivos de mapeamento XML. Neste caso, é recomendável que você abandone seus mapeamento XML somente se você tiver tempo de sobra, uma vez que os mesmos continuarão funcionando sem qualquer alteração no Hibernate 3. Outra questão diz respeito à migração a partir de um ambiente legado. Em alguns casos temos dezenas de POJOs já existentes e funcionando corretamente e não gostaríamos de inserir anotações nos mesmos, o que acarretaria em novos testes, de forma a evitar possíveis bugs em classes já em produção. Há ainda os casos nos quais não temos o código-fonte dos POJOs (talvez foram perdidos ou gerados por uma ferramenta de automação). Aqui podemos usar o arquivo de mapeamento XML para novamente obter o código-fonte da classe que nos interessa. Manter as informações de mapeamento como arquivos XML externos nos permite mudar detalhes do mapeamento para refletir regras de negócio ou alterações de esquema sem a necessidade de reconstruir toda a aplicação novamente. Um ponto a favor de Annotations é que o mapeamento diretamente no código-fonte da classe é muito mais intuitivo, uma vez que elas estão muito próximas das propriedades ou campos com as quais elas estão relacionadas. sendo assim, Considere o seguinte POJO (Plain Old Java Object):
Esta classe Java poderia ser mapeada com uma tabela clientes no banco de dados usando o seguinte arquivo XML:
Esta é a forma usual. Veja agora como abandonar completamente o arquivo de mapeamento em XML e usar Annotations diretamente na classe Java:
O primeiro detalhe a observar nesta nova versão da classe Cliente é a importação do pacote javax.persistence. No Hibernate 3 este pacote está no jar hibernate-jpa-2.0-api-1.0.0.Final.jar, localizado na pasta lib/jpa. É neste pacote que encontramos os vários tipos de anotações, tais como Entity, Id, Table, etc. Veja que antes da definição da classe nós usamos a anotação @Entity para informar que objetos desta classes são beans de entidades e, portanto, deverão possuir um construtor sem argumentos com visibilidade no mínimo protected. Como a intenção é usar esta classe para outras finalidades, podemos definir o construtor como public mesmo. Em seguida usamos a anotação @Table(name="clientes") para definir o nome da tabela no banco de dados que contém os registros que serão obtidos e convertidos em objetos da classe Cliente. Se não informarmos o nome da tabela, o Hibernate procurará por uma tabela com o nome Cliente. Todos os beans de entidades em Hibernate devem possuir uma chave primária, que é um campo na tabela do banco de dados que identifica unicamente cada registro. Em geral a chave primária é um único campo da tabela mas, nada impede que usemos uma chave primária composta (vários campos que, quando agrupados, identificam unicamente cada registro). O campo ou propriedade da classe que será usada como chave primária é marcado com a anotação @Id. Nesta classe de exemplo eu marquei a propriedade (o método getId()) porque o campo id é privado. Se este campo fosse público, a anotação poderia ser feita no campo e não no método. Podemos informar ao Hibernate a estratégia usada para a geração do valor da chave primária. Veja:
Aqui nós usamos a anotação @GeneratedValue para informar que a estratégia usada será aquela mais apropriada para cada banco de dados, o que resultará em uma chave primária do tipo auto-incremento. Podemos, contudo, omitir esta anotação, visto que este é o comportamente padrão. Uma vez que a classe Java já esteja pronta e devidamente "anotada", precisamos informar ao Hibernate a existência desta entidade. Isso é feito no arquivo hibernate.cfg.xml da seguinte forma:
Finalmente devemos mudar a forma pela qual a SessionFactory é obtida. Quando estamos usando Annotations, devemos adotar a seguinte estratégia:
Veja o contraste com a forma usada para obter a SessionFactory quando estamos usando arquivos de mapeamento XML:
|
|||||||
![]() |
|||||||
Veja mais Dicas e truques de Hibernate |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |