A JBoss anunciou o mais novo integrante da família Hibernate, o Hibernate OGM. Com o OGM, sigla para Object/Grid Mapper, é possível persistir dados a partir de aplicações Java em uma base de dados NoSQL, implementando a camada de persistência através do mapeamento com a Java Persistence API (JPA).
Segundo a JBoss, o Hibernate OGM favorece o uso de tecnologias NoSQL em projetos construídos sobre um modelo de domínio (domain model centric), por profissionais que não possuem grande experiência em ferramentas NoSQL. O projeto simplifica o modelo de programação de NoSQL, seguindo um modelo de persistência popular entre os desenvolvedores Java, JPA.
O Hibernate OGM define dois contratos para garantir as operações de persistência, as interfaces Persister e Loader. Através de implementações dessas duas interfaces, o OGM utiliza o Hibernate Core para realizar as operações CRUD (Criação, Leitura, Atualização, Apagamento) em entidades. Além do Hibernate Core, o Hibernate Search e o Infinispan são outras ferramentas utilizadas pelo Hibernate OGM. A figura a seguir (extraída da documentação do OGM) mostra uma visão da arquitetura do projeto:
Entre os conceitos básicos adotados pelo Hibernate OGM estão:
- As entidades são armazenadas como tuplas, especificamente uma estrutura em Map<String, Object> em que a chave é o nome da coluna e o valor é o respectivo conteúdo.
- Suporte aos seguintes tipos de relacionamento entre entidades: @ManyToOne, @OneToOne, @OneToMany e @ManyToMany. Este último só funciona em relacionamentos unidirecionais.
- É mantido o conceito de chave primária para todas as entidades, além da chave estrangeira para relacionar entre entidades.
- É isolada a camada de modelo (os Pojos persistentes) da camada de armazenamento (datastore).
A abstração entre os Pojos persistentes e o datastore do OGM define um isolamento entre a estrutura em que os dados são armazenados e as classes de modelo. Essa estratégia traz benefícios como a possibilidade de mudar a estrutura da classe sem se preocupar em migrar os dados gerados a partir de uma versão anterior da classe.
Outro benefício, proveniente do uso de um grafo é que, por maior que seja o volume de objetos relacionados não haverá problemas de armazenamento nessa estrutura. O diagrama a seguir (também da documentação) demonstra a estrutura da base NoSQL e como o Hibernate OGM organiza as informações:
Na versão atual do projeto, a linguagem de consultas do JPA, a JPQL, não é suportada. Mas consultas simples podem ser realizadas através da API do Hibernate Search. E, por enquanto, a única ferramenta NoSQL suportada é o Infinispan.
Os próximos passos planejados para Hibernate OGM são:
- Suporte para outros mecanismos de armazenamento chave/valor.
- Suporte a outras ferramentas NoSQL.
- Desnormalização declarativa.
- Suporte a JPQL, incluindo consultas complexas envolvendo relacionamentos.
É possível fazer o download do Hibernate OGM na página de distribuição ou no repositório do Maven. Já existe uma documentação de referência online, além do guia de instalação, o javadoc e o wiki do projeto. Durante o keynote do JBoss World 2011 foi apresentado uma demo do Hibernate OGM. É possível acessar o vídeo dessa apresentação ou um post no blog do Hibernate que resume o keynote.