Está en la página 1de 10

CRUD com Hibernate 4 e JPA.

| we have science

http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/

we have science

CRUD com Hibernate 4 e JPA.

i
4 Votes

em, vou explicar o bsico para se utilizar esse framework que uma p* mo da roda na hora de
desenvolver aplicaes que acessam o banco de dados.
Primeiro lugar, o que Hibernate?
um framework de persistncia de dados, ele faz um mapeamento Objeto Relacional, no qual faz
voc trabalhar passando objetos e recebendo objetos, ao invs da forma convencional que voc tem
que fazer isso manualmente, no caso do JDBC.
Antes de comear com a aplicao, vou postar os links dos jars necessrios.
Baixe a ultima verso do Hibernate, no caso, baixei a 4.1.8. Link aqui: Hibernate 4
Agora, baixe o connector do MySQL, que ser o banco de dados utilizado nesta aplicao: Connector
MySQL
Agora, crie uma base de dados no MySQL com o nome de wehavescience.
Aps baixar, crie um projeto Java utilizando a IDE de sua preferncia.
Adicione o jar do connector do MySQL no seu classpath.
Agora, dentro da pasta lib do hibernate que voc baixou, adicione no seu classpath do seu projeto
todos os jars da pasta required e todos os jars da pasta jpa.
Okaydokay, prximo passo:
Dentro da pasta src do seu projeto, crie uma pasta chamada META-INF.
Dentro da pasta META-INF, crie um arquivo chamado persistence.xml

1 de 10

13/04/2015 13:52

CRUD com Hibernate 4 e JPA. | we have science

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/

<?xml version="1.0" encoding="UTF-8" ?>


<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.c
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="WeHaveSciencePU" transaction-type="RESOURCE_LOCAL"
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQ
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://loca
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="admin" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="false" />
<property name="hibernate.use_sql_comments" value="false" />
<property name="hibernate.jdbc.wrap_result_sets" value="false" />
<property name="hibernate.hibernate.cache.use_query_cache" value
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>

Nesse trecho de cdigo, voc dene o seu persistence unit, que voc vai ter que referenciar no seu
DAO:
1

<persistence-unit name="WeHaveSciencePU" transaction-type="RESOURCE_LOCAL">

E nesse trecho, suas informaes do banco, como por exemplo, nome da base de dados, usurio e
senha:
1
2
3

<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/we


<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="admin" />

Agora, vamos criar nossa entidade Pessoa.

2 de 10

13/04/2015 13:52

CRUD com Hibernate 4 e JPA. | we have science

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

http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/

package com.entities;
import
import
import
import
import

javax.persistence.Column;
javax.persistence.Entity;
javax.persistence.GeneratedValue;
javax.persistence.Id;
javax.persistence.Table;

@Entity
@Table(name="pessoas")
public class Pessoa {
private Long id;
private String nome;
private Integer idade;
@Id
@GeneratedValue
@Column(name="pessoas_id")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name="pessoas_nome")
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Column(name="pessoas_idade")
public Integer getIdade() {
return idade;
}
public void setIdade(Integer idade) {
this.idade = idade;
}
}

A anotao @Entity, voc dene que sua classe uma entidade a ser mapeada pelo hibernate.
Nessa anotao @Table(name=pessoas), deno que a tabela no banco de dados ter o nome de
pessoas
Deno minha chave primria aqui @Id, e @GeneratedValue fala que o valor ser gerado pelo prprio
hibernate, de forma sequencial.
Notem que eu coloquei um @Column(name=pessoas_nomedacoluna) em todas as colunas. No
necessrio, porm eu coloquei para denir o nome de cada uma no banco de dados.
Existem inmeras outras anotaes, talvez mais tarde eu cite outras que so bem usadas, mas por
agora, s essas mesmo, at porque o objetivo desse tutorial apenas ensinar os comandos bsicos de
CRUD.
Agora, criaremos a classe DAO.
3 de 10

13/04/2015 13:52

CRUD com Hibernate 4 e JPA. | we have science

4 de 10

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

http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/

package com.dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.entities.Pessoa;
public class PessoaDAO {
protected EntityManager entityManager;
public PessoaDAO() {
entityManager = getEntityManager();
}
private EntityManager getEntityManager() {
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("WeHaveSciencePU");
if (entityManager == null) {
entityManager = factory.createEntityManager();
}
return entityManager;
}
public Pessoa getById(final Long id) {
return entityManager.find(Pessoa.class, id);
}
@SuppressWarnings("unchecked")
public List<Pessoa> findAll() {
return entityManager.createQuery("FROM " + Pessoa.class.getName())
.getResultList();
}
public void persist(Pessoa pessoa) {
try {
entityManager.getTransaction().begin();
entityManager.persist(pessoa);
entityManager.getTransaction().commit();
} catch (Exception ex) {
ex.printStackTrace();
entityManager.getTransaction().rollback();
}
}
public void merge(Pessoa pessoa) {
try {
entityManager.getTransaction().begin();
entityManager.merge(pessoa);
entityManager.getTransaction().commit();
} catch (Exception ex) {
ex.printStackTrace();
entityManager.getTransaction().rollback();
}
}

13/04/2015 13:52

CRUD com Hibernate 4 e JPA. | we have science

60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80

http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/

public void remove(Pessoa pessoa) {


try {
entityManager.getTransaction().begin();
pessoa = entityManager.find(Pessoa.class, pessoa.getId());
entityManager.remove(pessoa);
entityManager.getTransaction().commit();
} catch (Exception ex) {
ex.printStackTrace();
entityManager.getTransaction().rollback();
}
}
public void removeById(final Long id) {
try {
Pessoa pessoa = getById(id);
remove(pessoa);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}

Utilizo o objeto EntityManager, no qual so realizadas as aes com o banco.


Notem que eu estou denindo meu persistence unit, onde so carregadas as conguraes do
persistence.xml
1
2
3
4
5
6
7
8
9

private EntityManager getEntityManager() {


EntityManagerFactory factory = Persistence
.createEntityManagerFactory("WeHaveSciencePU");
if (entityManager == null) {
entityManager = factory.createEntityManager();
}
return entityManager;
}

Aps criado o nosso DAO, vamos fazer algums testes.

5 de 10

13/04/2015 13:52

CRUD com Hibernate 4 e JPA. | we have science

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

http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/

package com.main;
import com.dao.PessoaDAO;
import com.entities.Pessoa;
public class Teste {
public static void main(String[] args) {
Pessoa p = new Pessoa();
p.setNome("Gabriel");
p.setIdade(19);
Pessoa p2 = new Pessoa();
p2.setNome("Jos");
p2.setIdade(72);
Pessoa p3 = new Pessoa();
p3.setNome("Maria");
p3.setIdade(27);
Pessoa p4 = new Pessoa();
p4.setNome("Rodolfo");
p4.setIdade(16);
PessoaDAO dao = new PessoaDAO();
dao.persist(p);
dao.persist(p2);
dao.persist(p3);
dao.persist(p4);
for(Pessoa pe : dao.findAll()){
System.out.println(pe.getId());
System.out.println(pe.getNome());
System.out.println();
}
dao.remove(p);
dao.removeById(p2.getId());
for(Pessoa pe : dao.findAll()){
System.out.println(pe.getId());
System.out.println(pe.getNome());
System.out.println();
}
}
}

Obs.: Esse apenas um exemplo de como criar um DAO, eu aconselho a


usar algum framework de injeo de dependncias como por exemplo o
Spring para poder injetar seu EntityManager, ao invs de voc cri-lo

6 de 10

13/04/2015 13:52

CRUD com Hibernate 4 e JPA. | we have science

http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/

manualmente. O Spring sabe a melhor hora de criar ou fechar uma conexo


com o banco, alm de possuir pool de conexes(no qual voc pode definir
um tamanho) alm de que voc no precisa especificar manualmente
quando vai abrir ou fechar uma transao, ele pode fazer isso para voc.

Espero que gostem e que tenha sido um tutorial til! Valeu!


Dvidas? Postar nos comentrios!
[]s

You May Like


1.

banco de dados
hibernate
hibernate 4
java
jdbc
jpa
jpa2
persistencia
Posted on November 3, 2012October 5, 2013 by Gabriel in Hibernate, Java, JDBC api
15

15 thoughts on CRUD com Hibernate 4 e JPA.

7 de 10

1.

Wilson
says:
May 18, 2013 at 6:39 pm
Legal, tava dicil encontrar um tutorial com a verso do Hibernate mais recente
Reply

2.

Wilson
says:
May 18, 2013 at 7:00 pm
Esse tutorial aplicavel a projetos swing ?
Reply
1.

wehavescience
13/04/2015 13:52

CRUD com Hibernate 4 e JPA. | we have science

8 de 10

http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/

says:
May 19, 2013 at 2:56 pm
Fala, Wilson! Sim, sim!
Reply
3.

Nathalia
says:
May 25, 2013 at 10:19 am
Esse tutorial est excelente!
Passei por alguns probleminhas j resolvidos, e caso algum passe pelos mesmos problemas, eis as
solues:
O primeiro probleminha q eu tive foi em relao a localizao de META-INF/persistence.xml.
Estou usando o netbeans, e quando coloquei na raiz da pasta src, no funfou. Pra funcionar, eu
tive que usar src/java/META-INF/persistence.xml
Eu tive problema em utilizar o javax no arquivo persistence. Ento segui essa soluo aqui, em que
faz uso das propriedades do prprio hibernate:
hp://www.guj.com.br/java/229799-javalangunsupportedoperationexception-the-user-must-supply-a-jdbc-connection
Reply

4.

Moises
says:
July 14, 2013 at 9:55 pm
timo post Gabriel, tive alguns problemas no incio com No Persistence provider for
EntityManager named mas depois de algumas pesquisas v que no tinha includo o hibernateentitymanager-4.1.10.Final.jar da pasta JPA das libs do Hibernate, inclu e voal, funcionou
lindamente !!! *_*
Reply

5.

Tiago Cssio
says:
July 16, 2013 at 7:05 pm
Ol Gabriel, muito bom o seu tutorial!
Estou com uma dvida sobre o mtodo getEntityManager();
Onde voc utilizou ele???
Eu posso trocar ele pela anotao @PersistenceContext(unitName=WeHaveScience)???
No aguardo,
Reply
1.

wehavescience
says:
July 16, 2013 at 7:08 pm
Fala, Tiago.
Ento, eu usei no construtor do PessoaDAO
entityManager = getEntityManager();

13/04/2015 13:52

CRUD com Hibernate 4 e JPA. | we have science

9 de 10

http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/

E sim, voc pode, porm voc precisa estar executando a sua aplicao em algum contexto,
web, ejb, por exemplo, se estivesse rodando em um JBoss ou Tomcat Nesse caso, como eu
estou chamando o DAO do prprio main, essa anotao no iria funcionar e o entityManager
ia permanecer null.
Espero que tenha esclarecido a sua dvida.
Abrao!
Reply
1.

Tiago Cassio
says:
July 17, 2013 at 2:37 am
Ola Gabriel, boa noite!
Agora sim tirei minha duvida, muito obrigado!

6.

Bruno Tacca
says:
October 29, 2013 at 1:54 pm
Voc salvou meu dia, foi o sexto tutorial que tentei o unico que deu certo.
Parabns!
Reply

7.

Marcos Felipe
says:
December 16, 2013 at 5:28 pm
Vc no implementou nenhuma interface ??
No utilizou nenhuma classe com regra de negocio :O
Tem outro exemplo com Designer Paern ???
Reply
1.

Gabriel
says:
December 16, 2013 at 5:31 pm
Esse exemplo para mostrar apenas o bsico do JPA utilizando o Hibernate. Nada mais, nada
menos. :P
[]s

Reply
8. Pingback: TDSI Mapeamento objeto relacional (MOR) com Hibernate | Alex Sandro Valrio
9.

Wan
says:
May 29, 2014 at 5:07 pm
Ol Tiago, primeiramente, parabns pelo tutorial. S restou uma dvida: se eu tiver 10 entidades,
consequentemente terei 10 DAOentidade, com isso terei muito cdigo repetido em todos os 10
DAOs, tem como otimizar isso?
Reply

13/04/2015 13:52

CRUD com Hibernate 4 e JPA. | we have science

http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/

1.

Gabriel
says:
May 29, 2014 at 5:15 pm
Bem, meu nome Gabriel, no Tiago, mas tudo bem. :P hahahaha
Procure aqui no meu blog sobre Generic DAO, exatamente o que voc procura.
Abraos!
Reply

10.

Nilvandro Muianga
says:
November 12, 2014 at 6:30 am
Muito origado.
Reply

Create a free website or blog at WordPress.com.

The Scrawl Theme.

Follow

Follow we have science

10 de 10

Build a website with WordPress.com

13/04/2015 13:52

También podría gustarte