Tutorial de Hibernate
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
Objetivo
O Hibernate é o framework que fornece ferramentas para o mapeamento relacional de objeto (ORM).
Este tutorial demonstra o suporte para o framework do Hibernate no IDE Eclipse e como criar os arquivos necessários do Hibernate. Depois de criar objetos Java e configurar a aplicação usar o Hibernate, você cria uma classe de teste para a inclusão e exibição dos dados existentes no Banco de Dados.
Configuração
Utilizaremos neste tutorial a versão 4.2.7. Para isso acesse o site oficial do Hibernate: http://www.hibernate.org/
Link direto: Download
O arquivo compactado tem várias pastas. A mais importante para nós será a pasta lib\riquered.
Utilizaremos esses arquivos em nossa aplicação.
antlr-2.7.7.jar dom4j-1.6.1.jar hibernate-commons-annotations-4.0.2.Final.jar hibernate-core-4.2.7.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar javassist-3.18.1-GA.jar jboss-logging-3.1.0.GA.jar jboss-transaction-api_1.1_spec-1.0.1.Final.jar
1. Criando Uma aplicação
Abra o seu eclipse. Acesse o menu File >> Project >> Java project
[sb_easy_image num=”1″ column=”1″ order=”random” size=”full” link=”lightbox” ids=”248″ ]
Informe o nome AcademicNet e selecione Finish.
Teremos o resultado acima.
Criaremos uma pasta para adicionar os arquivos do Hibernate. Acesse: File >> New >> Folder
Selecione seu projeto e crie uma Pasta chamada lib.
Descompacte o arquivo que você fez o download do Hibernate.
Em seguida copie os arquivos da subpasta “lib/required” para esta pasta que você acabou de criar no projeto.
Seu projeto ficará assim:
Agora você deve associar os arquivos ao Build Path do projeto.
Selecione o seu projeto com o botão direito. Acesse Build Path >> Configure Build Path… Será exibida a seguinte tela:
Selecione a aba “Libraries”
Clique no botão “Add JARs…” no canto superior direito. Localize a pasta lib e selecione os arquivos JARS. Selecione OK.
Selecione o botão “OK” novamente. Agora faremos a codificação do projeto.
2. Criaremos as classes de Entidade
Selecione a pasta “src” com botão direito do mouse. New >> Class
Preencha os campos conforme a imagem abaixo:
Por fim selecione “Finish”.
Adicione o seguinte código a sua classe.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | package br.com.curso.entidade; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class Aluno implements Serializable{ private static final long serialVersionUID = -309513637403441918L; @Id @GeneratedValue private Long matricula; private String nome; private String telefone; public Long getMatricula() { return matricula; } public void setMatricula(Long matricula) { this.matricula = matricula; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getTelefone() { return telefone; } public void setTelefone(String telefone) { this.telefone = telefone; } @Override public String toString() { return "Aluno [matricula=" + matricula + ", nome=" + nome + ", telefone=" + telefone + "]"; } } |
3. Criaremos a Classe HibernateUtil
Esta é a classe responsável por pegar a conexão com o Banco de dados.
Selecione a pasta “src” com botão direito do mouse. New >> Class. Preencha os campos conforme a
imagem abaixo:
Insira o código abaixo na classe.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | package br.com.curso.dao; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; import org.hibernate.tool.hbm2ddl.SchemaExport; public class HibernateUtil { private static SessionFactory sessionFactory = null; private static ServiceRegistry serviceRegistry; static { try { sessionFactory = getSessionFactory(); } catch (Throwable ex) { System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { if (sessionFactory == null) { Configuration configuration = new Configuration(); configuration.configure(); serviceRegistry = new ServiceRegistryBuilder().applySettings( configuration.getProperties()).buildServiceRegistry(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); sessionFactory.openSession(); return sessionFactory; } return sessionFactory; } public static Session getSession() { return sessionFactory.openSession(); } public static void gerarBanco() { // Carrega as configurações do arquivo // hibernate.cfg.xml Configuration conf = new Configuration(); conf.configure(); SchemaExport se2 = new SchemaExport(conf); // Executa a operação da criação do Banco de Dados se2.create(true, true); } } |
4. Criaremos as classes DAO
Selecione a pasta “src” com botão direito do mouse. New >> Class. Preencha os campos conforme a imagem abaixo:
Insira o código abaixo na classe.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | package br.com.curso.dao; import java.util.ArrayList; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import br.com.curso.entidade.Aluno; public class AlunoDAO { private Session session; public void incluir(Aluno aluno) { try { session = HibernateUtil.getSession(); session.beginTransaction(); session.save(aluno); session.getTransaction().commit(); } catch (Exception e) { session.getTransaction().rollback(); e.printStackTrace(); } finally { session.close(); } } public void alterar(Aluno aluno) { try { session = HibernateUtil.getSession(); session.beginTransaction(); session.merge(aluno); session.getTransaction().commit(); } catch (Exception e) { session.getTransaction().rollback(); e.printStackTrace(); } finally { session.close(); } } public void excluir(Aluno aluno) { try { session = HibernateUtil.getSession(); session.beginTransaction(); session.delete(aluno); session.getTransaction().commit(); } catch (Exception e) { session.getTransaction().rollback(); e.printStackTrace(); } finally { session.close(); } } public Aluno consultar(int codigo) { Aluno retorno = new Aluno(); try { session = HibernateUtil.getSession(); session.beginTransaction(); retorno = (Aluno) session.get(Aluno.class, codigo); session.getTransaction().commit(); } catch (Exception e) { session.getTransaction().rollback(); e.printStackTrace(); } finally { session.close(); } return retorno; } @SuppressWarnings("unchecked") public List<Aluno> listar() { List<Aluno> lista = new ArrayList<Aluno>(); try { session = HibernateUtil.getSession(); session.beginTransaction(); lista = (List<Aluno>) session.createCriteria(Aluno.class).list(); session.getTransaction().commit(); } catch (Exception e) { session.getTransaction().rollback(); e.printStackTrace(); } finally { session.close(); } return lista; } @SuppressWarnings("unchecked") public List<Aluno> listar(Aluno aluno) { Criteria c = session.createCriteria(Aluno.class); if (aluno.getNome().length() > 0) { c.add(Restrictions.like("nome", aluno.getNome() + "%")); } c.addOrder(Order.asc("nome")); return (List<Aluno>) c.list(); } } |
…
5. Criaremos as classes de Teste
Selecione a pasta “src” com botão direito do mouse. New >> Class. Preencha os campos conforme a imagem abaixo:
Por fim selecione “Finish”.
Insira o código abaixo na classe.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | package br.com.curso.teste; import java.util.List; import br.com.curso.dao.AlunoDAO; import br.com.curso.entidade.Aluno; public class AlunoTeste { public static void main(String[] args) { new AlunoTeste().incluirAluno(); } public void incluirAluno() { System.out.println(this.getClass() + "Inicio"); try { // Cria a instância de um classe de acesso a Dados AlunoDAO dao = new AlunoDAO(); //Cria um objeto aluno informando apenas o nome Aluno aluno1 = new Aluno(); aluno1.setNome("Jose da Silva"); //Cria um objeto aluno informando apenas o nome Aluno aluno2 = new Aluno(); aluno2.setNome("Maria da Silva"); //Realiza a inclusão de um aluno dao.incluir(aluno1); //Realiza a inclusão de um aluno dao.incluir(aluno2); // Consulta a lista de usuários cadastrados no Banco List<Aluno> listaAluno = dao.listar(); // Realiza um loop para exibir todos os registro existentes no Banco de dados System.out.println("================== Alunos Cadastrados ============================"); for (Aluno a : listaAluno) { System.out.println(a); } } catch (Exception e) { e.printStackTrace(); } System.out.println(this.getClass() + "Fim"); } } |
6. Criaremos o arquivo de configuração do Hibernate
Selecione a pasta “src” com botão direito do mouse. New >> Other.. >> XML >> XML File. Preencha os campos conforme a imagem abaixo:
Por fim selecione “Finish”.
Insira o código abaixo no arquivo “hibernate.cfg.xml”. Nesse arquivos temos as seguintes dados:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- dados de Conexão com o Banco --> <property name="hibernate.connection.driver_class">org.postgresql.Driver</property> <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/BDAcademicNet</property> <property name="hibernate.connection.username">postgres</property> <property name="hibernate.connection.password">teco01</property> <!-- Quando Banco de dados será utilizado (PostgreSQL, MySQL, SQLServer, Oracle) --> <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.format_sql">true</property> <property name="hibernate.jdbc.batch_size">20</property> <property name="hibernate.hbm2ddl.auto">update</property> <!-- Ações que podem ser executadas: validate: Apenas valida se as tabelas estão conforme o modelo de entidades update: Atualiza as tabelas conforme estão as entidades create: Cria as tabelas que não existem create-drop: Apaga todas as tabelas e recria --> <!-- Lista das entidades que serão persistidas no Banco de Dados--> <mapping class="br.com.curso.entidade.Aluno" /> </session-factory> </hibernate-configuration> |
Conexão com o banco de dados:
7. Adicionar o Driver de Banco de Dados
Neste nosso exemplo utilizaremos o Banco PostgreSQL. Para isso devemos ter o Driver específico de cada banco de dados.
O Site oficial do PostgreSQL é esse http://jdbc.postgresql.org/download.html. Acesse e conheça um pouco mais sobre este banco. Faça o Download o Manual do usuário para consultar quando tiver dúvidas.
Link Direto para baixar o driver de banco de dados: http://jdbc.postgresql.org/download/postgresql-
9.3-1100.jdbc4.jar
Salve o arquivo diretamente na pasta lib criada em nosso projeto.
Em seguida é necessário fazer o apontamento do arquivo no projeto.
Selecione o seu projeto com o botão direito. Acesse Build Path >> Configure Build Path… Será exibida a seguinte tela:
Selecione a Aba “Libraries”
Clique em OK.
8. Criaremos o Banco de Dados
É necessário criar o banco de dados para que o Hibernate consiga criar as estruturas de tabelas. Abra o pgAdminIII.
Selecione o servidor com um duplo clique. Selecione o nó Database com o botão direito >> “New Data Base”.
Digite o nome do nosso banco de dados “BDAcademicNet”
Selecione “OK”
Seu banco estará criado.
Vá ao Eclipse selecione a sua classe AlunoTeste com o botão direito
Selecione “Run As” >> Java Application.
Na console deverá aparecer um resultado parecido com esse na console.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | Hibernate: select nextval ('hibernate_sequence') Hibernate: insert into Aluno (nome, telefone, matricula) values (?, ?, ?) Hibernate: select nextval ('hibernate_sequence') Hibernate: insert into Aluno (nome, telefone, matricula) values (?, ?, ?) Hibernate: select this_.matricula as matricul1_0_0_, this_.nome as nome2_0_0_, this_.telefone as telefone3_0_0_ from Aluno this_ ================== Alunos Cadastrados ============================ Aluno [matricula=1, nome=Jose da Silva, telefone=null] Aluno [matricula=2, nome=Maria da Silva, telefone=null] class br.com.curso.teste.AlunoTesteFim |
9. Veremos o resultado no Banco de Dados
Selecione o seu banco de dados no pgAdmin III. E clique no botão (exibido na barra de menu superior) com uma lupa escrita “SQL”.
Na tela exibida escreva o seguinte comando: Select * from aluno;
Deverá aparecer o resultado conforme a imagem abaixo:
Pronto! Se você seguiu o passo-a-passo. Estará tudo funcionando!
Vida que segue!
Se houve problemas na sua execução, então vamos analisar os mais comuns e suas soluções.
10. Erros Possíveis
Initial SessionFactory creation
failed.org.hibernate.service.classloading.spi.ClassLoadingExcep
tion: Specified JDBC Driver org.postgresql.Driver could not be
loaded
java.lang.NullPointerException
at br.com.curso.dao.AlunoDAO.incluir(AlunoDAO.java:27)
at
br.com.curso.teste.AlunoTeste.incluirAluno(AlunoTeste.java:26)
at br.com.curso.teste.AlunoTeste.main(AlunoTeste.java:9)
Motivo:
O Driver do Banco de dados não foi
adicionado. Veja o passo “Adicionar o
Driver de Banco de Dados”
"ERROR: HHH000299: Could not complete schema update
org.postgresql.util.PSQLException: FATAL: banco de dados
"BDAcademicNet" n?o existe"
Motivo:
Você não criou o banco de Dados no PostgreSQL
ERROR: HHH000299: Could not complete schema update
org.postgresql.util.PSQLException: FATAL: autenticação do tipo
password falhou para usu?rio "postgres"
Motivo:
Verifique se o usuário e senha no arquivo “hibernate.cfg.xml” conferem
com a identificação do seu banco de dados.
Propriedades:
hibernate.connection.username
hibernate.connection.password
org.postgresql.util.PSQLException: A tentativa de conexão
falhou.
Motivo:
Veja no arquivo “hibernate.cfg.xml” se a propriedade hibernate.connection.url está com as configurações de acesso ao seu
banco de dados corretamente. Deve ser: jdbc:postgresql://localhost:5432/BDAcademicNet