Você está na página 1de 9

27/10/13

CRUD com Hibernate 4 e JPA. | we have science

we have science
Um blog sobre Java e computao. ;)
P OS T E DB Y G A B R I E L P OS T E DON NOV E MB E R3 , 2 0 1 2 P OS T E DUND E R HI B E R NA T E , J A V A , J A V A+ MY S QL C OMME NT S 8 C OMME NT S

CRUD com Hibernate 4 e JPA.

i 1 Vote Bem, 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.

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

Baixe a ultima verso do Hibernate, no caso, baixei a 4.1.8. Link aqui: Hibernate 4

1/9

27/10/13

CRUD com Hibernate 4 e JPA. | we have science

Baixe a ultima verso do Hibernate, no caso, baixei a 4.1.8. Link aqui: Hibernate 4 (http://sourceforge.net/projects/hibernate/files/hibernate4/) Agora, baixe o connector do MySQL, que ser o banco de dados utilizado nesta aplicao: Connector MySQL (http://dev.mysql.com/downloads/connector/j/) 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 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2

< ? x m lv e r s i o n = " 1 . 0 "e n c o d i n g = " U T F 8 "? > < p e r s i s t e n c ex m l n s : x s i = " h t t p : / / w w w . w 3 . o r g / 2 0 0 1 / X M L S c h e m a i n s t a n c e( h t t p : / x s i : s c h e m a L o c a t i o n = " h t t p : / / j a v a . s u n . c o m / x m l / n s / p e r s i s t e n c e( h t t p : / / j a v e r s i o n = " 2 . 0 "x m l n s = " h t t p : / / j a v a . s u n . c o m / x m l / n s / p e r s i s t e n c e( h t t p : / / j < p e r s i s t e n c e u n i tn a m e = " W e H a v e S c i e n c e P U "t r a n s a c t i o n t y p e = " R E S O U R C E _ L < p r o v i d e r > o r g . h i b e r n a t e . e j b . H i b e r n a t e P e r s i s t e n c e < / p r o v i d e r > < p r o p e r t i e s > < p r o p e r t yn a m e = " h i b e r n a t e . d i a l e c t "v a l u e = " o r g . h i b e r n a t e . d i a l e < p r o p e r t yn a m e = " j a v a x . p e r s i s t e n c e . j d b c . d r i v e r "v a l u e = " c o m . m y s < p r o p e r t yn a m e = " j a v a x . p e r s i s t e n c e . j d b c . u r l "v a l u e = " j d b c : m y s q l < p r o p e r t yn a m e = " j a v a x . p e r s i s t e n c e . j d b c . u s e r "v a l u e = " r o o t " < p r o p e r t yn a m e = " j a v a x . p e r s i s t e n c e . j d b c . p a s s w o r d "v a l u e = " a d m i n

< p r o p e r t yn a m e = " h i b e r n a t e . s h o w _ s q l "v a l u e = " t r u e "/ > < p r o p e r t yn a m e = " h i b e r n a t e . f o r m a t _ s q l "v a l u e = " f a l s e "/ > < p r o p e r t yn a m e = " h i b e r n a t e . u s e _ s q l _ c o m m e n t s "v a l u e = " f a l s e " < p r o p e r t yn a m e = " h i b e r n a t e . j d b c . w r a p _ r e s u l t _ s e t s "v a l u e = " f a l s e < p r o p e r t yn a m e = " h i b e r n a t e . h i b e r n a t e . c a c h e . u s e _ q u e r y _ c a c h e " < p r o p e r t yn a m e = " h i b e r n a t e . h b m 2 d d l . a u t o "v a l u e = " u p d a t e "/ > < / p r o p e r t i e s > < / p e r s i s t e n c e u n i t > < / p e r s i s t e n c e >

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

< p e r s i s t e n c e u n i tn a m e = " W e H a v e S c i e n c e P U "t r a n s a c t i o n t y p e = " R E S O U R C E _ L O C A L "

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

< p r o p e r t yn a m e = " j a v a x . p e r s i s t e n c e . j d b c . u r l "v a l u e = " j d b c : m y s q l : / / l o c a l h o s t : < p r o p e r t yn a m e = " j a v a x . p e r s i s t e n c e . j d b c . u s e r "v a l u e = " r o o t "/ > < p r o p e r t yn a m e = " j a v a x . p e r s i s t e n c e . j d b c . p a s s w o r d "v a l u e = " a d m i n "/ >

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

2/9

27/10/13

CRUD com Hibernate 4 e JPA. | we have science

Agora, vamos criar nossa entidade Pessoa. 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 p a c k a g ec o m . e n t i t i e s ; i m p o r tj a v a x . p e r s i s t e n c e . C o l u m n ; i m p o r tj a v a x . p e r s i s t e n c e . E n t i t y ; i m p o r tj a v a x . p e r s i s t e n c e . G e n e r a t e d V a l u e ; i m p o r tj a v a x . p e r s i s t e n c e . I d ; i m p o r tj a v a x . p e r s i s t e n c e . T a b l e ; @ E n t i t y @ T a b l e ( n a m e = " p e s s o a s " ) p u b l i cc l a s sP e s s o a{ p r i v a t eL o n gi d ; p r i v a t eS t r i n gn o m e ; p r i v a t eI n t e g e ri d a d e ; @ I d @ G e n e r a t e d V a l u e @ C o l u m n ( n a m e = " p e s s o a s _ i d " ) p u b l i cL o n gg e t I d ( ){ r e t u r ni d ; } p u b l i cv o i ds e t I d ( L o n gi d ){ t h i s . i d=i d ; } @ C o l u m n ( n a m e = " p e s s o a s _ n o m e " ) p u b l i cS t r i n gg e t N o m e ( ){ r e t u r nn o m e ; } p u b l i cv o i ds e t N o m e ( S t r i n gn o m e ){ t h i s . n o m e=n o m e ; } @ C o l u m n ( n a m e = " p e s s o a s _ i d a d e " ) p u b l i cI n t e g e rg e t I d a d e ( ){ r e t u r ni d a d e ; } p u b l i cv o i ds e t I d a d e ( I n t e g e ri d a d e ){ t h i s . i d a d e=i d a d e ; }

A anotao @Entity, voc define que sua classe uma entidade a ser mapeada pelo hibernate. Nessa anotao @Table(name=pessoas), defino que a tabela no banco de dados ter o nome de pessoas Defino 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 definir 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

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

3/9

27/10/13

CRUD com Hibernate 4 e JPA. | we have science

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. 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 p a c k a g ec o m . d a o ; i m p o r tj a v a . u t i l . L i s t ; i m p o r tj a v a x . p e r s i s t e n c e . E n t i t y M a n a g e r ; i m p o r tj a v a x . p e r s i s t e n c e . E n t i t y M a n a g e r F a c t o r y ; i m p o r tj a v a x . p e r s i s t e n c e . P e r s i s t e n c e ; i m p o r tc o m . e n t i t i e s . P e s s o a ; p u b l i cc l a s sP e s s o a D A O{ p r o t e c t e dE n t i t y M a n a g e re n t i t y M a n a g e r ; p u b l i cP e s s o a D A O ( ){ e n t i t y M a n a g e r=g e t E n t i t y M a n a g e r ( ) ; } p r i v a t eE n t i t y M a n a g e rg e t E n t i t y M a n a g e r ( ){ E n t i t y M a n a g e r F a c t o r yf a c t o r y=P e r s i s t e n c e . c r e a t e E n t i t y M a n a g e r F a c t o r y ( " W e H a v e S c i e n c e P U " ) ; i f( e n t i t y M a n a g e r= =n u l l ){ e n t i t y M a n a g e r=f a c t o r y . c r e a t e E n t i t y M a n a g e r ( ) ; } } r e t u r ne n t i t y M a n a g e r ;

p u b l i cP e s s o ag e t B y I d ( f i n a lL o n gi d ){ r e t u r ne n t i t y M a n a g e r . f i n d ( P e s s o a . c l a s s ,i d ) ; }

@ S u p p r e s s W a r n i n g s ( " u n c h e c k e d " ) p u b l i cL i s t < P e s s o a >f i n d A l l ( ){ r e t u r ne n t i t y M a n a g e r . c r e a t e Q u e r y ( " F R O M"+P e s s o a . c l a s s . g e t N a m e ( ) . g e t R e s u l t L i s t ( ) ; } p u b l i cv o i dp e r s i s t ( P e s s o ap e s s o a ){ t r y{ e n t i t y M a n a g e r . g e t T r a n s a c t i o n ( ) . b e g i n ( ) ; e n t i t y M a n a g e r . p e r s i s t ( p e s s o a ) ; e n t i t y M a n a g e r . g e t T r a n s a c t i o n ( ) . c o m m i t ( ) ; }c a t c h( E x c e p t i o ne x ){ e x . p r i n t S t a c k T r a c e ( ) ; e n t i t y M a n a g e r . g e t T r a n s a c t i o n ( ) . r o l l b a c k ( ) ; } } p u b l i cv o i dm e r g e ( P e s s o ap e s s o a ){ t r y{ e n t i t y M a n a g e r . g e t T r a n s a c t i o n ( ) . b e g i n ( ) ;


4/9

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

27/10/13

CRUD com Hibernate 4 e JPA. | we have science

5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 8 0

e n t i t y M a n a g e r . m e r g e ( p e s s o a ) ; e n t i t y M a n a g e r . g e t T r a n s a c t i o n ( ) . c o m m i t ( ) ; }c a t c h( E x c e p t i o ne x ){ e x . p r i n t S t a c k T r a c e ( ) ; e n t i t y M a n a g e r . g e t T r a n s a c t i o n ( ) . r o l l b a c k ( ) ; }

p u b l i cv o i dr e m o v e ( P e s s o ap e s s o a ){ t r y{ e n t i t y M a n a g e r . g e t T r a n s a c t i o n ( ) . b e g i n ( ) ; p e s s o a=e n t i t y M a n a g e r . f i n d ( P e s s o a . c l a s s ,p e s s o a . g e t I d ( ) ) ; e n t i t y M a n a g e r . r e m o v e ( p e s s o a ) ; e n t i t y M a n a g e r . g e t T r a n s a c t i o n ( ) . c o m m i t ( ) ; }c a t c h( E x c e p t i o ne x ){ e x . p r i n t S t a c k T r a c e ( ) ; e n t i t y M a n a g e r . g e t T r a n s a c t i o n ( ) . r o l l b a c k ( ) ; } } p u b l i cv o i dr e m o v e B y I d ( f i n a lL o n gi d ){ t r y{ P e s s o ap e s s o a=g e t B y I d ( i d ) ; r e m o v e ( p e s s o a ) ; }c a t c h( E x c e p t i o ne x ){ e x . p r i n t S t a c k T r a c e ( ) ; } }

Utilizo o objeto EntityManager, no qual so realizadas as aes com o banco. Notem que eu estou definindo meu persistence unit, onde so carregadas as configuraes do persistence.xml 1 2 3 4 5 6 7 8 9 p r i v a t eE n t i t y M a n a g e rg e t E n t i t y M a n a g e r ( ){ E n t i t y M a n a g e r F a c t o r yf a c t o r y=P e r s i s t e n c e . c r e a t e E n t i t y M a n a g e r F a c t o r y ( " W e H a v e S c i e n c e P U " ) ; i f( e n t i t y M a n a g e r= =n u l l ){ e n t i t y M a n a g e r=f a c t o r y . c r e a t e E n t i t y M a n a g e r ( ) ; } } r e t u r ne n t i t y M a n a g e r ;

Aps criado o nosso DAO, vamos fazer algums testes. 1 2 3 4 5 6 7 8 9 1 0 p a c k a g ec o m . m a i n ; i m p o r tc o m . d a o . P e s s o a D A O ; i m p o r tc o m . e n t i t i e s . P e s s o a ; p u b l i cc l a s sT e s t e{ p u b l i cs t a t i cv o i dm a i n ( S t r i n g [ ]a r g s ){ P e s s o ap=n e wP e s s o a ( ) ; p . s e t N o m e ( " G a b r i e l " ) ;
5/9

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

27/10/13

CRUD com Hibernate 4 e JPA. | we have science

1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0

p . s e t I d a d e ( 1 9 ) ; P e s s o ap 2=n e wP e s s o a ( ) ; p 2 . s e t N o m e ( " J o s " ) ; p 2 . s e t I d a d e ( 7 2 ) ; P e s s o ap 3=n e wP e s s o a ( ) ; p 3 . s e t N o m e ( " M a r i a " ) ; p 3 . s e t I d a d e ( 2 7 ) ; P e s s o ap 4=n e wP e s s o a ( ) ; p 4 . s e t N o m e ( " R o d o l f o " ) ; p 4 . s e t I d a d e ( 1 6 ) ; P e s s o a D A Od a o=n e wP e s s o a D A O ( ) ; d a o . p e r s i s t ( p ) ; d a o . p e r s i s t ( p 2 ) ; d a o . p e r s i s t ( p 3 ) ; d a o . p e r s i s t ( p 4 ) ; f o r ( P e s s o ap e:d a o . f i n d A l l ( ) ) { S y s t e m . o u t . p r i n t l n ( p e . g e t I d ( ) ) ; S y s t e m . o u t . p r i n t l n ( p e . g e t N o m e ( ) ) ; S y s t e m . o u t . p r i n t l n ( ) ; } d a o . r e m o v e ( p ) ; d a o . r e m o v e B y I d ( p 2 . g e t I d ( ) ) ; f o r ( P e s s o ap e:d a o . f i n d A l l ( ) ) { S y s t e m . o u t . p r i n t l n ( p e . g e t I d ( ) ) ; S y s t e m . o u t . p r i n t l n ( p e . g e t N o m e ( ) ) ; S y s t e m . o u t . p r i n t l n ( ) ; }

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

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

6/9

27/10/13

CRUD com Hibernate 4 e JPA. | we have science

Espero que gostem e que tenha sido um tutorial til! Valeu! Dvidas? Postar nos comentrios! []s

You May Like


1.

About these ads (http://en.wordpress.com/aboutthese-ads/)

banco de dados (http://wehavescience.com/tag/banco-de-dados/) hibernate (http://wehavescience.com/tag/hibernate-2/) hibernate 4 (http://wehavescience.com/tag/hibernate-4/) java (http://wehavescience.com/tag/java/) jdbc (http://wehavescience.com/tag/jdbc/) jpa (http://wehavescience.com/tag/jpa/) jpa2 (http://wehavescience.com/tag/jpa2/) persistencia (http://wehavescience.com/tag/persistencia/)

8 thoughts on CRUD com Hibernate 4 e JPA.


1. Wilson says: May 18, 2013 at 6:39 pm Legal, tava dificil encontrar um tutorial com a verso do Hibernate mais recente Reply Wilson says: May 18, 2013 at 7:00 pm Esse tutorial aplicavel a projetos swing ? Reply wehavescience says: May 19, 2013 at 2:56 pm Fala, Wilson! Sim, sim!
wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/ 7/9

2.

27/10/13

CRUD com Hibernate 4 e JPA. | we have science

3.

Reply 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: http://www.guj.com.br/java/229799-javalangunsupportedoperationexception-the-user-mustsupply-a-jdbc-connection Reply 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 hibernate-entitymanager-4.1.10.Final.jar da pasta JPA das libs do Hibernate, inclu e voal, funcionou lindamente !!! *_* Reply 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 wehavescience says: July 16, 2013 at 7:08 pm Fala, Tiago. Ento, eu usei no construtor do PessoaDAO entityManager = getEntityManager();

4.

5.

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,

8/9

27/10/13

CRUD com Hibernate 4 e JPA. | we have science

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 Tiago Cassio says: July 17, 2013 at 2:37 am Ola Gabriel, boa noite! Agora sim tirei minha duvida, muito obrigado!

Blog at WordPress.com. | The Zoren Theme.

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

9/9