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

Tutorial-Hibernate-1

[sb_easy_image num=”1″ column=”1″ order=”random” size=”full” link=”lightbox” ids=”248″ ]

Tutorial-Hibernate-2

Informe o nome AcademicNet e selecione Finish.

Tutorial-Hibernate-3

Tutorial-Hibernate-4

Teremos o resultado acima.

Criaremos uma pasta para adicionar os arquivos do Hibernate. Acesse: File >> New >> Folder

Tutorial-Hibernate-5

Selecione seu projeto e crie uma Pasta chamada lib.

Tutorial-Hibernate-6

Descompacte o arquivo que você fez o download do Hibernate.

Tutorial-Hibernate-7

Em seguida copie os arquivos da subpasta “lib/required” para esta pasta que você acabou de criar no projeto.

Seu projeto ficará assim:

Tutorial-Hibernate-8

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:

Tutorial-Hibernate-9

Selecione a aba “Libraries”

Tutorial-Hibernate-10

Clique no botão “Add JARs…” no canto superior direito. Localize a pasta lib e selecione os arquivos JARS. Selecione OK.

Tutorial-Hibernate-11

Tutorial-Hibernate-12

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

Tutorial-Hibernate-13

Preencha os campos conforme a imagem abaixo:

Tutorial-Hibernate-14

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:

Tutorial-Hibernate-15

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:

Tutorial-Hibernate-16

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:

Tutorial-Hibernate-17

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:

Tutorial-Hibernate-18

Tutorial-Hibernate-19

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.

Tutorial-Hibernate-20

Selecione o seu projeto com o botão direito. Acesse Build Path >> Configure Build Path… Será exibida a seguinte tela:

Tutorial-Hibernate-21

Selecione a Aba “Libraries”

Tutorial-Hibernate-22

Tutorial-Hibernate-23

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”

Tutorial-Hibernate-24

Tutorial-Hibernate-25

Selecione “OK”

Seu banco estará criado.

Tutorial-Hibernate-26

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”.

Tutorial-Hibernate-27

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