introdução a persistência de dados e ‘Inversion of Control’ em Java
José Moreira
O objectivo deste artigo é apresentar as capacidades de algumas ferramentas disponíveis em Java ao nível da persistência de classes (objectos) em sistemas de gestão de bases de dados. Por persistência entende-se a gravação do estado de uma estrutura de classes e posterior consulta, actualização e eliminação.
Introdução ao Hibernate
Uma dessas frameworks chama-se Hibernate (existente também para .Net sob o nome Nhibernate). Através da configuração do mapeamento entre as classes e a sua estrutura da base de dados (geralmente através de metadata em XML), é possível indicar ao Hibernate como guardar uma classe numa tabela (ou várias), incluíndo classes relacionadas com a primeira.
O objectivo deste tópico é meramente explicar alguns conceitos por detrás da persistência de dados, não aprofundar a utilização do Hibernate standalone, dado que no contexto do objectivo final do tutorial, ele é apenas um sub-sistema. Tomemos por exemplo as seguintes classes Autor e Livro:
public class Autor { private Integer id; private String nome; } public class Livro { private Integer id; private String titulo; private Autor autor; }
Para a persistência destas classes será criada uma estrutura de base de dados com o seguinte formato:
CREATE TABLE autor ( id bigint(20) NOT NULL AUTO_INCREMENT, nome varchar(70) NOT NULL, PRIMARY KEY (id) ) CREATE TABLE editora ( id bigint(20) NOT NULL AUTO_INCREMENT, titulo varchar(70) NOT NULL, id_autor bigint(20) NOT NULL, PRIMARY KEY (id) )
A configuração do Hibernate (neste caso o Hibernate 2) para este sistema será:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="Autor" table="autor"> <id name="id" column="id_autor" type="long"> <generator class="identity"/> </id> <property name="nome" column="nome" type="string" length="70"/> </class> <class name="Livro" table="autor"> <id name="id" column="id_autor" type="int"> <generator class="identity"/> </id> <property name="titulo" column="titulo" type="string" length="70"/> <one-to-one name="autor" class="Autor"/> </class> </hibernate-mapping>
A classe Livro contém uma instância Autor (relação 1-1). Aquando da persistência da classe Livro, será gravada a classe Autor na tabela autor, a classe Livro na tabela Livro e a chave estrangeira id_autor na tabela livro será preenchida com o ID gerado para o autor. Ao carregar-se uma instância da classe Livro da base de dados, a sua propriedade autor será automáticamente instanciada com o objecto Autor correspondente (carregado da base de dados também).
Uma dedução lógica é que, dado que os ficheiros de configuração contém a definição da estrutura de classes com que pretendemos trabalhar e a sua relação com a base de dados, eles contém também a definição da estrutura da base de dados, por isso é possível ao Hibernate criar a estrutura de base de dados de raíz, sincronizada com os ficheiros de configuração. Mais ainda. Dado que a metadata é genérica, o Hibernate gerará a estrutura de base de dados no sistema de base de dados configurado, seja MySQL, Postgres, SQL Server, Oracle ou outras disponíveis.
Java, SQL, hibernate, jpa, software, spring framework, tecnologia |
2 comentários »

