Académique Documents
Professionnel Documents
Culture Documents
Hibernate e PostgreSQL
Como programador Java, muito provavelmente, em
algum momento haverá a necessidade de guardar e
recuperar as informações dos objetos em algum local...
Compartilhar
Como programador Java, muito provavelmente, em algum momento haverá a
necessidade de guardar e recuperar as informações dos objetos em algum local. Na
maioria dos casos essas informações, tanto de objetos quanto de componentes,
serão armazenados em um banco de dados relacional.
O Hibernate é uma excelente ferramenta open source que possibilita essa forma de
trabalho, ou seja, ele é uma ferramenta que possibilita a persistência transparente
de objetos Java. Persistência transparente, dita anteriormente, quer dizer que os
objetos não tem nenhum código que expõe a habilidade de ser persistido no
repositório, ao contrário de como acontece com os Entity Beans.
• Chave Primária
• Mapeamento dos campos dos objetos com seus respectivas colunas nas
tabelas.
• Associações / Coleções
• jta-spec1_0_1.jar - Hibernate
• asm.jar - Hibernate
• cglib-2.1.3.jar - Hibernate
• commons-logging-1.0.4.jar – PostgreSQL
• dom4j-1.6.1.jar - Hibernate
• ehcache-1.2.jar – Hibernate
• hibernate3.jar - Hibernate
• commons-collections.jar – PostgreSQL
• postgresql-8.0-315.jdbc3.jar – PostgreSQL
A seguir está o código da classe endereco, onde encontramos apenas seus atributos
e seus respectivos gets e sets, sobre a qual executaremos as tarefas de Salvar,
Recuperar, Excluir e Atualizar os objetos no banco:
return cep;
}
public void setCep(String cep) {
this.cep = cep;
return cidade;
this.cidade = cidade;
return codigo;
this.codigo = codigo;
return estado;
this.estado = estado;
return rua;
}
public void setRua(String rua) {
this.rua = rua;
Como mapear esse objeto para o banco? É um processo relativamente fácil, basta
criar um arquivo com a extensão nomeMapeamento.hbm.xml, neste caso colocarei
o nome mapEndereco.hbm.xml com o seguinte conteúdo:
<?xml version="1.0"?>
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="localizacao">
<class name="endereco">
</class>
</hibernate-mapping>
Segue abaixo um script para a criação da tabela no PostgreSQL. Saliento que, para
o exemplo funcionar perfeitamente, os atributos da tabela deverão ser idênticos aos
elementos mapeados da classe. Considere que para cada campo mapeado
deveremos ter um correspondente na tabela do banco, porém isso não quer dizer
que deverão ter os mesmo nomes, mas por uma questão de praticidade
manteremos os mesmos nomes tanto no banco quanto na classe. Caso houver a
necessidade de ter nomes diferentes, apenas será necessário explicitar o campo na
tabela para cada propriedade.
CREATETABLE Endereco (
);
Estamos agora, com toda a estrutura necessária para realizar algumas tarefas
corriqueiras dentro de um ambiente cliente-servidor como salvar, recuperar, apagar
e atualizar registros no banco de dados sem ao menos uma linha de código em
SQL.
Como primeiro exemplo teremos uma classe com um único método, neste caso o
main, que irá realizar todas as tarefas, desde configurar os parâmetros referentes à
conexão com o banco de dados até salvar os objetos.
...
setProperty("hibernate.dialect",
"org.hibernate.dialect.PostgreSQLDialect").
setProperty("hibernate.connection.driver_class",
"org.postgresql.Driver").
setProperty("hibernate.connection.url",
"jdbc:postgresql://www.sitio.com.br:5432/Endereco").
setProperty("hibernate.connection.username", "postgres").
setProperty("hibernate.connection.password", "123").
setProperty("hibernate.show_sql", "true");
config.addClass(Classe.class);
...
Para criar um objeto e salva-lo no banco, temos que passar pelos passos seguintes:
...
...
Transaction tx = null;
try {
session = factory.openSession();
tx = session.beginTransaction();
session.persist(obj);
tx.commit();
} catch (Exception e) {
if (tx != null)
tx.rollback();
e.printStackTrace();
} finally {
session.close();
...
No entanto para ler um objeto o Hibernate Session oferece dois métodos com base
em chave primária, load e get. O load admite que o objeto está persistido, porém
se não conseguir recuperar o objeto, é lançada a exceção do tipo
org.hibernate.ObjectNotFoundException. Já o get, nos casos em que o objeto
procurado não for encontrado, será retornado null, dessa forma o programa terá
que trata-lo.
Exemplos:
...
A Session possui muitos outros métodos para interagir com o banco, segue abaixo
mais alguns exemplos:
session.update(...);
session.delete(...);
session.save(...);
session.saveOrUpdate(...);
importorg.hibernate.*;
import org.hibernate.cfg.*;
end.setCidade("Feira de Santana");
end.setEstado("BA");
end.setCep("4419999");
Transaction tx = null;
try {
session = factory.openSession();
tx = session.beginTransaction();
session.persist(end);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
setProperty("hibernate.dialect",
"org.hibernate.dialect.PostgreSQLDialect").
setProperty("hibernate.connection.driver_class",
"org.postgresql.Driver").
setProperty("hibernate.connection.url",
"jdbc:postgresql://www.sitio.com.br:5432/Endereco").
setProperty("hibernate.connection.username", "postgres").
setProperty("hibernate.connection.password", "123").
setProperty("hibernate.show_sql", "true");
config.addClass(((endereco)classe).getClass());
return config.buildSessionFactory();
Espero que tenham gostado do que foi exposto aqui nesse artigo, e qualquer
dúvida, crítica, elogios, podem entrar em contato. Até a próxima.
Referências
• java.sun.com
• www.hibernate.org
• www.postgresql.org