Você está na página 1de 23

18/09/13

Utilizando Swing com JPA/Hibernate

HOME

AUTHOR

MAGAZINES

LIST OF POSTS
Social Media

Home Swing Jdbc:Banco De Dados Hibernate | Jpa Utilizando Swing com JPA/Hibernate

Utilizando Swing com JPA/Hibernate


Published by Ballem | Fev 23 , 2011 | Swing | Jdbc:Banco De Dados | Hibernate | Jpa
Search this Site...

Este tutorial poderia ser uma segunda parte do tutorial anterior Utilizando Swing com Banco de Dados, a classe de interface com usurio 99% a mesma, a classe controller idem. O que est diferente aqui que utilizaremos o framework Hibernate, para a persistncia com banco de dados, com JPA (Java Persistence API). Utilizaremos desta vez o banco de dados HSQLDB no modo standalone, mas quem preferir pode continuar utilizando o MySql como no tutorial anterior, s utilizar as mesmas configuraes de url, drive, usurio e senha, quando for necessrio utilizar. O padro MVC tambm ser seguido como no tutorial anterior, do link acima, ento caso no tenha lido o tutorial anterior, seria importante ler a respeito do que o padro MVC. 1. Arquivos necessrios Para o desenvolvimento deste tutorial sero necessrias algumas bibliotecas referentes ao Hibernate e a JPA, e mais algumas que necessitam ser utilizadas como algumas dependncias. E tambm claro do Driver JDBC do HSQLDB ou do MySql. Veja as bibliotecas necessrias na figura 1.

Popular Posts
Manipulando Arquivo Txt com Java Ler dados do teclado com a classe Scanner Chat Multi Usurios com Socket Utilizando Swing com Banco de Dados Enviando email com a API JavaMail

www.mballem.com/post/utilizando-swing-com-jpahibernate

1/23

18/09/13

Utilizando Swing com JPA/Hibernate

Categories
Arquivos (Xml|Txt|Properties) (8) Dicas (5) Fundamentos Java (9) Hibernate | Jpa (6) Jdbc:Banco De Dados (14) Jms (Java Message Service) (1) Nosql:Banco De Dados (2) Noticias (18) Outras Apis (15) Socket (4) Figura 1 - Bibliotecas Montei um pacote com todas as bibliotecas e as disponibilizei para download aqui. 2. Java Persistence API e Hibernate JPA uma especificao padro do Java para persistncia de dados. A JPA define um meio de mapeamento objeto-relacional para objetos Java, os chamados POJOs, denominados beans de entidade. Diversos frameworks de mapeamento objeto/relacional, como o Hibernate, implementam a JPA gerenciando o desenvolvimento de entidades do Modelo Relacional usando a plataforma nativa Java SE e Java EE. O Hibernate um framework para mapeamento objetorelacional, totalmente escrito em Java. O principal objetivo do Hibernate diminuir a complexidade entre os programas escritos em Java, baseando-se no modelo orientado objeto. Quando utilizamos o HIbernate, deixamos de trabalhar com tabelas e colunas, e passamos a trabalhar com objetos. Quem j desenvolveu em Java com banco de dados e utilizando ResultSet e PreparedStatement para criar consultas e outras aes com o banco de dados, trabalhou diretamente com tabelas e colunas. Utilizando o Hibernate, as tabelas e colunas so mapeadas por mapeamentos XML ou anotaes, e a partir da trabalhamos apenas com objetos, o que facilita em muito o desenvolvimento. 3. Arquivo persistence.xml Spring Framework (4) Swing (6) Video Aula (5)

Tag Cloud
arquivos artigos banco de dados boas praticas capturar html
certificacoes chat criteria dao dom

easy java magazine

fundamentos java herana hibernate hsqldb html

java

java magazine javamail jboss

jdbc jdk leitura e escrita de arquivos livros mongodb mvc


mysql nosql noticias ocaj 7 ocpjp 7 preparedstatement resultset revistas scanner sessionfactory socket spring framework spring mvc swing video aula xml

Favourites Links
Apache Tomcat Forum GUJ Forum Javafree Hibernate Framework Intellij IDEA JBoss Application Server

www.mballem.com/post/utilizando-swing-com-jpahibernate

2/23

18/09/13

Utilizando Swing com JPA/Hibernate

Quando utilizamos JPA, precisamos utilizar um arquivo que contem algumas configuraes importantes para a conexo com o banco de dados atravs do Hibernate. Este arquivo deve ser chamado de persistence.xml e estar dentro de um diretrio chamado META-INF no classpath da aplicao, ou seja, no mesmo nvel do pacote br, o primeiro pacote dos fontes, veja na figura 2.

MongoDB MySQL OpenShift - Red Hat Oracle Spring Framework

Follow us on Twitter
Follow @m ballem 37 follow ers

Recommend us on Google
2

Find us on Facebook
Figura 2 - Projeto Listagem 1. Arquivo 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
Encontre-nos no Facebook

mballem.com
Curtir

? < ? x m lv e r s i o n = " 1 . 0 "e n c o d i n g = " U T F 8 " ? > 148 pessoas curtiram mballem.com. < p e r s i s t e n c ex 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

< p e r s i s t e n c e u n i tn a m e = " a g e n d a "t r a n s a c t i o n t y p e < c l a s s > b r . m b . t u t o r i a l H i b e r n a t e J p a . m o d e l . C o n t a t o < / < 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 . c o n n e c t i o n . u r l " < p r o p e r t yn a m e = " h i b e r n a t e . c o n n e c t i o n . d r i v e r _ c l a s s " < p r o p e r t yn a m e = " h i b e r n a t e . c o n n e c t i o n . u s e r n a m e " < p r o p e r t yn a m e = " h i b e r n a t e . c o n n e c t i o n . p a s s w o r d " < 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 < 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 < 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 < 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 " < / 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 >

A tag persistence-unit possui dois elementos importantes, o name que recebe um nome para identificar as configuraes e o transaction-type que indica se aplicao ser com ou sem container (servidor web). Precisamos tambm indicar neste arquivo onde se encontra o mapeamento, para isso, usamos a tag class e nela indicamos a classe que contm as anotaes referentes a tabela Contatos. As demais tags, filhas de properties, so referentes as configuraes do Hibernate, como as configuraes para conexo e para exibir alguns logs no console dos SQLs executados.
www.mballem.com/post/utilizando-swing-com-jpahibernate 3/23

18/09/13

Utilizando Swing com JPA/Hibernate

4. Tabela contatos Desta vez no iremos precisar de script para criar a tabela Contatos no banco de dados, a JPA nos fornece uma maneira simples para isso. Basta a criao de um mtodo que atravs dos mapeamentos as tabelas so geradas. Para criar o banco de dados basta executar a classe principal GeraBanco , conforme a listagem 2. Listagem 2. Gerando o banco de dados.
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 p a c k a g eb r . m b . t u t o r i a l H i b e r n a t e J p a . a g e n d a ; i m p o r to r g . h i b e r n a t e . c f g . C o n f i g u r a t i o n ; i m p o r to r g . h i b e r n a t e . e j b . E j b 3 C o n f i g u r a t i o n ; i m p o r to r g . h i b e r n a t e . t o o l . h b m 2 d d l . S c h e m a E x p o r t ; p u b l i cc l a s sG e r a B a n c o{ 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 ){ E j b 3 C o n f i g u r a t i o nc f g=n e wE j b 3 C o n f i g u r a t i o n ( ) ; / / a g e n d ae hon o m ed op e r s i s t e n c e u n i tn op e r s i s t e n c e . x m l . c f g . c o n f i g u r e ( " a g e n d a " ,n u l l ) ; C o n f i g u r a t i o nh b m c f g=c f g . g e t H i b e r n a t e C o n f i g u r a t i o n ( ) ; S c h e m a E x p o r ts c h e m a E x p o r t=n e wS c h e m a E x p o r t ( h b m c f g ) ; s c h e m a E x p o r t . c r e a t e ( t r u e ,t r u e ) ;
?

Ao gerar o banco de dados HSQLDB, ser criada uma pasta chamada db e dentro dela estaro os arquivos do banco de dados. Esta pasta ser gerada um nvel acima do pacote dos arquivos fontes da aplicao, ou seja, no mesmo nvel em que voc deve ter o pacote lib, veja na figura 2. Quem utilizar um banco de dados no modo servidor, como o Mysql ou outros, algumas vezes ser necessrio criar o banco de dados manualmente no gerenciador, para ento rodar a classe GeraBanco , que ela ir criar as tabelas. 5. Classe de Conexo Trabalhando com JPA/Hibernate, teremos uma classe de conexo diferente do que temos quando criamos uma conexo direta por JDBC. No caso da JPA devemos criar uma classe conforme a listagem 3. Essa classe vai ler as configuraes do arquivo persistence.xml e configurar uma fabrica de conexes para o sistema. Sempre que for necessria uma conexo, faremos uma chamada ao mtodo esttico getEntityManager().

www.mballem.com/post/utilizando-swing-com-jpahibernate

4/23

18/09/13

Utilizando Swing com JPA/Hibernate

Listagem 3. Classe EntityManagerUtil


1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 p a c k a g eb r . m b . t u t o r i a l H i b e r n a t e J p a . d a o ; 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 ; p u b l i cc l a s sE n t i t y M a n a g e r U t i l{ p r i v a t es t a t i cE n t i t y M a n a g e r F a c t o r ye m f ; p u b l i cs t a t i cE 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 ( ){ i f( e m f= =n u l l ) { e m f=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 ( } r e t u r ne m f . c r e a t e E n t i t y M a n a g e r ( ) ; }
?

6. Classe GenericDao Vamos criar uma classe genrica para os mtodos insert, update e delete, e algumas consultas que podem ser padro para vrias entidades, veja na listagem 4. Listagem 4. Classe GenericDao
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 p a c k a g eb r . m b . t u t o r i a l H i b e r n a t e J p a . d a o ; i m p o r to r g . h i b e r n a t e . S e s s i o n ; i m p o r to r g . h i b e r n a t e . c r i t e r i o n . R e s t r i c t i o n s ; 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 T r a n s a c t i o n ; 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 C o n t e x t ; i m p o r tj a v a . i o . S e r i a l i z a b l e ; i m p o r tj a v a . l a n g . r e f l e c t . P a r a m e t e r i z e d T y p e ; i m p o r tj a v a . u t i l . L i s t ; p u b l i cc l a s sG e n e r i c D a o < Te x t e n d sS e r i a l i z a b l e >{ @ P e r s i s t e n c e C o n t e x t ( u n i t N a m e=" a g e n d a " ) p r i v a t ef i n a lE 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 r i v a t ef i n a lC l a s s < T >p e r s i s t e n t C l a s s ; p u b l i cG e n e r i c D a o ( ){ t h i s . 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 U t i l . g e t E n t i t y M a n a g e r ( ) ; t h i s . p e r s i s t e n t C l a s s=( C l a s s < T > )( ( P a r a m e t e r i z e d T y p e ) g e t C l a s s ( ) . g e t G e n e r i c S u p e r c l a s s ( ) ) . g e t A c t u a l T y p e A r g u m e n t s ( ) [ } p u b l i cE 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 ( ){ r e t u r ne n t i t y M a n a g e r ; } p r o t e c t e dv o i ds a v e ( Te n t i t y ){ E n t i t y T r a n s a c t i o nt x=g e t 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 ( ) ; t r y{ t x . b e g i n ( ) ; g e t E n t i t y M a n a g e r ( ) . p e r s i s t ( e n t i t y ) ; t x . c o m m i t ( ) ; }c a t c h( T h r o w a b l et ){
5/23

www.mballem.com/post/utilizando-swing-com-jpahibernate

18/09/13

Utilizando Swing com JPA/Hibernate

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 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 8 1 8 2 8 3 8 4 8 5 8 6 8 7 8 8 8 9 9 0 9 1 9 2 9 3 9 4 9 5 9 6 9 7 9 8 9 9 1 0 0 1 0 1 1 0 2 1 0 3 1 0 4 1 0 5

t . p r i n t S t a c k T r a c e ( ) ; t x . r o l l b a c k ( ) ; }f i n a l l y{ c l o s e ( ) ; }

p r o t e c t e dv o i du p d a t e ( Te n t i t y ){ E n t i t y T r a n s a c t i o nt x=g e t 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 ( ) ; t r y{ t x . b e g i n ( ) ; g e t E n t i t y M a n a g e r ( ) . m e r g e ( e n t i t y ) ; t x . c o m m i t ( ) ; }c a t c h( T h r o w a b l et ){ t . p r i n t S t a c k T r a c e ( ) ; t x . r o l l b a c k ( ) ; }f i n a l l y{ c l o s e ( ) ; } } p r o t e c t e dv o i dd e l e t e ( Te n t i t y ){ E n t i t y T r a n s a c t i o nt x=g e t 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 ( ) ; t r y{ t x . b e g i n ( ) ; g e t E n t i t y M a n a g e r ( ) . r e m o v e ( e n t i t y ) ; t x . c o m m i t ( ) ; }c a t c h( T h r o w a b l et ){ t . p r i n t S t a c k T r a c e ( ) ; t x . r o l l b a c k ( ) ; }f i n a l l y{ c l o s e ( ) ; }

p u b l i cL i s t < T >f i n d A l l ( )t h r o w sE x c e p t i o n{ S e s s i o ns e s s i o n=( S e s s i o n )g e t E n t i t y M a n a g e r ( ) . g e t D e l e g a t e ( ) ; r e t u r ns e s s i o n . c r e a t e C r i t e r i a ( p e r s i s t e n t C l a s s ) . l i s t ( ) ; } p u b l i cTf i n d B y N a m e ( S t r i n gn o m e ){ S e s s i o ns e s s i o n=( S e s s i o n )g e t E n t i t y M a n a g e r ( ) . g e t D e l e g a t e ( ) ; r e t u r n( T )s e s s i o n . c r e a t e C r i t e r i a ( p e r s i s t e n t C l a s s ) . a d d ( R e s t r i c t i o n s . e q ( " n o m e " ,n o m e ) . i g n o r e C a s e ( ) ) . u n i q u e R e s u l t ( ) ; } p u b l i cTf i n d B y I d ( l o n gi d ){ S e s s i o ns e s s i o n=( S e s s i o n )g e t E n t i t y M a n a g e r ( ) . g e t D e l e g a t e ( ) ; r e t u r n( T )s e s s i o n . c r e a t e C r i t e r i a ( p e r s i s t e n t C l a s s ) . a d d ( R e s t r i c t i o n s . e q ( " i d " ,i d ) ) . u n i q u e R e s u l t ( ) ; } p r i v a t ev o i dc l o s e ( ){ i f( g e t E n t i t y M a n a g e r ( ) . i s O p e n ( ) ){ g e t E n t i t y M a n a g e r ( ) . c l o s e ( ) ; } s h u t d o w n ( ) ; } p r i v a t ev o i ds h u t d o w n ( ){ E n t i t y M a n a g e re m=E n t i t y M a n a g e r U t i l . g e t E n t i t y M a n a g e r ( ) ; E n t i t y T r a n s a c t i o nt x=e m . g e t T r a n s a c t i o n ( ) ; t x . b e g i n ( ) ; e m . c r e a t e N a t i v e Q u e r y ( " S H U T D O W N " ) . e x e c u t e U p d a t e ( ) ; e m . c l o s e ( ) ; }
6/23

www.mballem.com/post/utilizando-swing-com-jpahibernate

18/09/13

Utilizando Swing com JPA/Hibernate

1 0 6

A anotao @PersistenteContex() indica qual classe ser responsvel pela persistncia dos dados. A varivel persistentClass utilizada para termos acesso a entidade que est sendo executada no momento. Utilizamos o tipo genrico na classe, e atravs do tipo genrico que obtemos a entidade para utiliz-la nas consultas, veremos mais a frente. No construtor da classe criamos um objeto EntityManager, que nos dar acesso ao mtodos necessrios, e obtemos a entidade que est utilizando a classe no momento. Nos mtodos save, update e delete, precisamos criar uma transao, abrir est transao e ento executar o que queremos fazer. No caso do mtodo save(), utilizamos o persist(), que recebe como par metro um objeto e o framework executa um insert atravs dele. A grande vantagem que no precisamos nos preocupar com o SQL de insert, update ou delete, s passamos o objeto e o framework faz o resto. Depois da execuo, se tudo ocorrer bem executado um commit na transao do banco de dados e ento um close chamado para fechar a comunicao com o banco de dados.
Back top

Uma observao para quem no est utilizando o HSQLDB, o mtodo shutdown() no deve ser utilizado, este mtodo utilizado apenas no HSQLDB. No artigo JDBC com Banco de Dados Standalone eu falo sobre isso.

Nas consultas foi utilizada a API Criteria, uma forma diferente de fazer o select quando utilizamos orientao objetos e no objetos relacionais. Outra forma que pode ser utilizada o HQL, um dialeto SQL para o Hibernate, uma consulta muito parecida com o SQL, porm se trabalha com objetos e seus atributos e no com tabelas e colunas. Quando utilizamos Criteria, precisamos indicar qual a entidade que far a consulta, por isso, utilizamos a varivel persistentClass, para passarmos para o mtodo qual entidade est sendo executada no momento da consulta. Seria como se ele estivesse passando por par metro algo como isto: Contato.class 7. Classe Contato

www.mballem.com/post/utilizando-swing-com-jpahibernate

7/23

18/09/13

Utilizando Swing com JPA/Hibernate

Nossa classe contato ter como atributos os campos da tabela Contatos, mapeados em forma de anotaes. Atravs das anotaes podemos passar todas as informaes que uma coluna teria, como o tipo de dado, tamanho, nome, entre outros. Listagem 5. Classe Contato
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 p a c k a g eb r . m b . t u t o r i a l H i b e r n a t e J p a . m o d e l ; i m p o r tj a v a . s q l . D a t e ; i m p o r tj a v a x . p e r s i s t e n c e . * ; i m p o r tj a v a . i o . S e r i a l i z a b l e ; @ E n t i t y @ T a b l e ( n a m e=" C O N T A T O S " ) p u b l i cc l a s sC o n t a t oi m p l e m e n t sS e r i a l i z a b l e{ p r i v a t es t a t i cf i n a ll o n gs e r i a l V e r s i o n U I D=1 L ; @ I d @ G e n e r a t e d V a l u e ( s t r a t e g y=G e n e r a t i o n T y p e . I D E N T I T Y ) @ C o l u m n ( n a m e=" I D _ C O N T A T O " ) p r i v a t eL o n gi d ; @ C o l u m n ( n a m e=" N O M E " ) p r i v a t eS t r i n gn o m e ; @ C o l u m n ( n a m e=" A P E L I D O " ) p r i v a t eS t r i n ga p e l i d o ; @ T e m p o r a l ( T e m p o r a l T y p e . D A T E ) @ C o l u m n ( n a m e=" D A T A _ N A S C I M E N T O " ) p r i v a t eD a t ed t N a s c i m e n t o ; / / g e r eo sm t o d o sg e t t e r sa n ds e t t e r s
?

8. Classe ContatoDao Criamos a classe GenericDao para ser herdadas pelos demais daos, assim, vamos agora criar a classe ContatoDao , onde estaro os mtodos mais especficos da classe. Veja na listagem 6. Listagem 6. Classe ContatoDao
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 p a c k a g eb r . m b . t u t o r i a l H i b e r n a t e J p a . d a o ; i m p o r tb r . m b . t u t o r i a l H i b e r n a t e J p a . m o d e l . C o n t a t o ; p u b l i cc l a s sC o n t a t o D a oe x t e n d sG e n e r i c D a o < C o n t a t o >{ p u b l i cv o i ds a l v a r ( C o n t a t oc o n t a t o ){ s a v e ( c o n t a t o ) ; } p u b l i cv o i da l t e r a r ( C o n t a t oc o n t a t o ){ u p d a t e ( c o n t a t o ) ; } p u b l i cv o i de x c l u i r ( l o n gi d ){ C o n t a t oc=f i n d B y I d ( i d ) ; d e l e t e ( c ) ; }
8/23

www.mballem.com/post/utilizando-swing-com-jpahibernate

18/09/13

Utilizando Swing com JPA/Hibernate

2 0

Veja que utilizamos herana nesta classe, herdando os mtodos criados na classe GenericDao . Nossos mtodos salvar(), alterar() e excluir() no possuem mais a criao do SQL que ser executado no banco de dados, como no artigo anterior, e sim uma chamada ao mtodo da classe GenericDao e l os mtodos do EntityManager faro o trabalho. 9. Classe ContatoController Pouqussimas alteraes sero feitas na classe controller em relao a classe controller do artigo anterior. Apenas foram alterados o nome do pacote do projeto, as excees que antes eram SQLException para Exception e no mtodo listaContatos() o retorno foi alterado de dao.findContatos() para dao.findAll(), j que agora temos um mtodo genrico e no exclusivo para contatos. Essa uma das vantagens do padro MVC, ns podemos modificar parte do projeto sem que influencie drasticamente em outros pontos dele. Listagem 7. Classe ContatoController
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 p a c k a g eb r . m b . t u t o r i a l H i b e r n a t e J p a . c o n t r o l l e r ; i m p o r tb r . m b . t u t o r i a l H i b e r n a t e J p a . d a o . C o n t a t o D a o ; i m p o r tb r . m b . t u t o r i a l H i b e r n a t e J p a . m o d e l . C o n t a t o ; i m p o r tj a v a x . s w i n g . * ; i m p o r tj a v a . s q l . D a t e ; i m p o r tj a v a . t e x t . D a t e F o r m a t ; i m p o r tj a v a . t e x t . P a r s e E x c e p t i o n ; i m p o r tj a v a . t e x t . S i m p l e D a t e F o r m a t ; i m p o r tj a v a . u t i l . L i s t ; p u b l i cc l a s sC o n t a t o C o n t r o l l e r{ p r i v a t eD a t ef o r m a t a r D a t a ( S t r i n gd a t a )t h r o w sP a r s e E x c e p t i o n{ D a t e F o r m a tf o r m a t t e r=n e wS i m p l e D a t e F o r m a t ( r e t u r nn e wD a t e (f o r m a t t e r . p a r s e ( d a t a ) . g e t T i m e ( )) ; } p u b l i cv o i ds a l v a r ( S t r i n gn o m e ,S t r i n ga p e l i d o ,S t r i n gd t N a s c i m e n t o ) C o n t a t oc o n t a t o=n e wC o n t a t o ( ) ; c o n t a t o . s e t N o m e ( n o m e ) ; c o n t a t o . s e t A p e l i d o ( a p e l i d o ) ; c o n t a t o . s e t D t N a s c i m e n t o ( f o r m a t a r D a t a ( d t N a s c i m e n t o ) ) ; } n e wC o n t a t o D a o ( ) . s a l v a r ( c o n t a t o ) ;
?

p u b l i cv o i da l t e r a r ( l o n gi d ,S t r i n gn o m e ,S t r i n ga p e l i d o ,S t r i n gd t N a s c i m e n t o ) C o n t a t oc o n t a t o=n e wC o n t a t o ( ) ; c o n t a t o . s e t I d ( i d ) ; c o n t a t o . s e t N o m e ( n o m e ) ; c o n t a t o . s e t A p e l i d o ( a p e l i d o ) ;
9/23

www.mballem.com/post/utilizando-swing-com-jpahibernate

18/09/13

Utilizando Swing com JPA/Hibernate

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 5 2 5 3 5 4 5 5 5 6 5 7

c o n t a t o . s e t D t N a s c i m e n t o ( f o r m a t a r D a t a ( d t N a s c i m e n t o ) ) ; } n e wC o n t a t o D a o ( ) . a l t e r a r ( c o n t a t o ) ;

p u b l i cL i s t < C o n t a t o >l i s t a C o n t a t o s ( ){ C o n t a t o D a od a o=n e wC o n t a t o D a o ( ) ; t r y{ r e t u r nd a o . f i n d A l l ( ) ; }c a t c h( S Q L E x c e p t i o ne ){ J O p t i o n P a n e . s h o w M e s s a g e D i a l o g ( n u l l ," P r o b l e m a sa ol o c a l i z a rc o n t a t o n " } r e t u r nn u l l ; } p u b l i cv o i de x c l u i r ( l o n gi d )t h r o w sE x c e p t i o n{ n e wC o n t a t o D a o ( ) . e x c l u i r ( i d ) ; } p u b l i cC o n t a t ob u s c a C o n t a t o P o r N o m e ( S t r i n gn o m e ) C o n t a t o D a od a o=n e wC o n t a t o D a o ( ) ; r e t u r nd a o . f i n d B y N a m e ( n o m e ) ; }

9. Classe ContatoFrame A interface continua a mesma, uma interface como a da figura 3.

Figura 3 - Interface Contatos A classe ContatoFrame sofreu alteraes mnimas, que foram apenas, alterar as excees SQLException por excees do tipo Exception. Faa essa alterao e nos casos dos mtodos que tenham dois tipos de excees, deixe a Exception no ltimo catch{}. Essa classe no foi postada no artigo, mas voc pode peg-la no tutorial anterior, acessando Utilizando Swing com Banco de Dados, e claro, no se esquea de alterar o nome do pacote e dos imports de ContatoController e Contato . Concluso

www.mballem.com/post/utilizando-swing-com-jpahibernate

10/23

18/09/13

Utilizando Swing com JPA/Hibernate

Este tutorial demonstrou como configurar e criar um projeto utilizando JPA com Hibernate. Fazendo uma comparao com o tutorial Utilizando Swing com Banco de Dados , onde utilizamos conexo direta com JDBC e utilizvamos PreparedStatement e ResultSet, e os SQLs para consultas e demais mtodos com banco de dados, o framework Hibernate nos facilita muito nesse ponto. Tambm podemos comparar como vlido separar as camadas da aplicao utilizando o padro MVC, assim, facilita muito a manuteno dos cdigos. Saiba mais Criteria http://download.oracle.com/javaee/6/tutorial/doc/gjitv.html Genricos em Java http://en.wikipedia.org/wiki/Generics_in_Java HQL http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html Criteria com hibernate http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querycriteria.html JPA http://www.oracle.com/technetwork/articles/javaee/jpa137156.html Hibernate Annotations http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html Graphical User Interface http://download.oracle.com/javase/tutorial/ui/index.html

Tags: swing

entitymanager | hibernate | hsqldb | java | jdbc | jpa |

Short Link:

http://bit.ly/16hnKzv

Gosto

Tw eet

Share

Related Posts
Injeo de
www.mballem.com/post/utilizando-swing-com-jpahibernate

Spring 3 MVC
11/23

18/09/13

Utilizando Swing com JPA/Hibernate

Dependncias com Guice (DI)

com Validator e Converter

JTable com Banco de Dados

Utilizando Swing com Hibernate (SessionFactory)

64 comments Leave a message...


Newest James Daniel
4 months ago

Share

Exatamente, Mrcio! Realmente eu estava utilizando o mesmo DAO para inserir e depois fazer uma consulta com findBy(). Eu pensava em reutilizar o DAO para economizar objetos na memria e por comodidade (rs). Na sua opinio vale a pena reutilizar o DAO para vrias operaes ou sempre usar um para cada ? Existe alguma vantagem em cada uma dessas abordagens ? Desculpe a demora para responder. Att.,

James

Reply MB allem

Share

> James Daniel

4 months ago


James Daniel

Ol James. No existe diferena em relao a performance. Seria mais relacionado individualmente ao padro de seus projetos. Escolha uma forma de usar e siga em frente.
Reply

Share

4 months ago

Obrigado pela pronta resposta, Mrcio. Estou longe do meu computador agora, mas assim que chegar vou testar o que voc me passou. www.mballem.com/post/utilizando-swing-com-jpahibernate

12/23

18/09/13

Utilizando Swing com JPA/Hibernate

testar o que voc me passou. Eu tinha feito uma classe para testar uma insero seguida de uma consulta (findById) usando o mesmo DAO. Assim que estiver perto do meu micro testo e retorno. Obrigado,


MB allem

James

Reply

Share

4 months ago

Ol James! O commit() no fecha a sesso. O que pode estar acontecendo que depois de salvar o objeto, voc est tentando de alguma maneira usando o mesmo objeto EntityManager e acontece o erro dizendo que o EntityManager j est fechado. Depois de salvar, voc precisa criar uma nova instancia do Dao para que ele crie um novo objeto EntityManager e assim, acredito que no ser lanada a exceo. Estou levando em considerao o exemplo do meu cdigo. Quando voc cria uma instancia do Dao criado um EntityManager e depois de salvar um objeto esse EntityManager fechado. Ento, nessa instancia do Dao voc no ter mais acesso ao EntityManager porque ele foi fechado. Dai precisa criar uma nova instancia do Dao para usar o EntityManager novamente. Voc pode mudar isso, tentando fazer essa alterao no cdigo: [sourcecode language="java"] public GenericDao() { //remova o entitymanager do construtor e passe ele para o mtodo getEntityManager(). //this.entityManager = EntityManagerUtil.getEntityManager(); this.persistentClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments() [0]; } public EntityManager getEntityManager() { return EntityManagerUtil.getEntityManager(); } www.mballem.com/post/utilizando-swing-com-jpahibernate

13/23

18/09/13

Utilizando Swing com JPA/Hibernate

} [/sourcecode]
Reply

Share
4 months ago

James Daniel

Marcio, consegui resolver fazendo isto comentando no mtodo close() no cdigo do GenericDao: protected void save(T entity) { EntityTransaction tx = getEntityManager().getTransaction(); try { tx.begin(); getEntityManager().persist(entity); getEntityManager().flush(); tx.commit(); } catch (Throwable t) { t.printStackTrace(); tx.rollback(); } //finally { //close(); //} } Suspeito que o close() est sendo feito aps o commit() automaticamente. Pode ser por isso que ele acusava o erro aps eu tentar fechar manualmente. Att.,

James

Reply

Share
4 months ago

James Daniel

Fala Marcio! Antes de mais nada, parabns pelo excelente tutorial! Eu tentei inserir aqui com MySQL usando uma tabela chamada Usuario [ id, login, senha] Ele grava no banco mas sempre d o erro "EntityManager is Closed" conforme abaixo: Hibernate: insert into db_piloto.usuario (login, senha, id_usuario) values (?, ?, ?) Exception in thread "main" java.lang.IllegalStateException: EntityManager is closed at org.hibernate.ejb.EntityManagerImpl.getSession(EntityManagerImpl.java:89)

www.mballem.com/post/utilizando-swing-com-jpahibernate

14/23

18/09/13

org.hibernate.ejb.EntityManagerImpl.getSession(EntityManagerImpl.java:89) at org.hibernate.ejb.AbstractEntityManagerImpl.getDelegate(AbstractEntityManagerImpl.java:1096) at br.com.coldsoft.projetos.piloto.dao.GenericDao.findById(GenericDao.java:87) at br.com.coldsoft.projetos.piloto.dao.UsuarioDaoT.main(UsuarioDaoT.java:18) J viu isso antes? Tem alguma dica para esse erro no ocorrer mais ? Muito Obrigado,

Utilizando Swing com JPA/Hibernate


V era

James

Reply

Share

4 months ago

This post is truly a nice one it helps new net visitors, who are wishing in favor of blogging.
Reply MB allem Share

> Vera
Reply

4 months ago


MB allem

Thank you Vera!


Share

9 months ago


Hs

Ol Hs. Faa o download do projeto no link que disponibilizei pelo github no final do tutorial e importe as bibliotecas necessrias atravs do maven.
Reply Share

9 months ago

Ol, poderia disponibilizar novamente o pacote com as bibliotecas? Agradeo.


Reply

Share

Rodrigo

11 months ago

Ok obrigado pela ajuda, tenho certeza que ajudou muitos iniciantes, grande abrao
Reply

Share

MB allem

11 months ago

www.mballem.com/post/utilizando-swing-com-jpahibernate

No Rodrigo, no deixara mais lento. O log serve para voc ter certas informaes do funcionamento do seu sistema, principalmente para te informar erros ocasionados no processamento do seu aplicativo.

15/23

18/09/13

ocasionados no processamento do seu aplicativo.


Reply

Utilizando Swing com JPA/Hibernate

Share

Rodrigo

11 months ago

Mas caso eu no coloque, pode deixar o sistema mais lento?


Reply

Share

MB allem

11 months ago

oi Rodrigo, isso no erro, aviso. Ele pede que voc utilize um arquivo de configurao para log. Isso no obrigatrio, mas caso queira incluir, de uma lida aqui> http://logging.apache.org/log4...
Reply

Share

Rodrigo

11 months ago

Corrigi o problema de salvar dados, parece esta tudo funcionando. Mas ainda persisti o erro que citei acima
Reply

Share

Rodrigo

11 months ago

Obrigado mesmo cara, desculpa at ta ai encomodando demais.., Tipo funcionou, crio a tabela mas ainda surge o erro >> log4j:WARN No appenders could be found for logger (org.hibernate.type.BasicTypeRegistry). log4j:WARN Please initialize the log4j system properly. Pede pra min inicializar o sistema log4j corretamente.., no entendi porque, e tambm no est salvando dados na tabela

Boa noite
Reply

Share

MB allem

11 months ago

Rodrigo, coloquei nesse servidor de arquivos: http://www.4shared.com/folder/...


Reply

Share

Rodrigo

11 months ago

Eu li sobre o erro, baixei as api's que dizia que resolvia o problema mas mesmo assim persisti o erro. No tem como voce me disponibilizar os jar's que voce usou no seu projeto? Agradeo desde j, abrao
www.mballem.com/post/utilizando-swing-com-jpahibernate 16/23

18/09/13

Agradeo desde j, abrao


Reply

Utilizando Swing com JPA/Hibernate

Share

MB allem

11 months ago

Rodrigo, parece que o problema agora ficou mais visvel, acredito que seja problema com a biblioteca slf4j, conforme informa a exceo: org.slf4j.impl.StaticLoggerBinder. Segundo relatado no link http://www.slf4j.org/codes.htm..., voc pode entender mais sobre esse erro.
Reply

Share

Rodrigo

11 months ago

Baixei todas as verses que esto no pom.xml e persisti o erro >>

www.mballem.com/post/utilizando-swing-com-jpahibernate

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.htm... for further details. log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version). log4j:WARN Please initialize the log4j system properly. Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError: org.hibernate.cfg.AnnotationConfiguration.addProperties(Ljava/util/Properties;)Lorg/hibernate/cfg/Ann at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:756) at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:191) at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:253) at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:125) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:78) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) at jpaTesteSwing.Dao.EntityManagerUtil.getEntityManager(EntityManagerUtil.java:12) at jpaTesteSwing.Dao.GenericDao. (GenericDao.java:21) at jpaTesteSwing.Dao.ProdutoDao. (ProdutoDao.java:8) at
17/23

18/09/13

at jpaTesteSwing.Controller.ProdutoController.salvar(ProdutoController.java:12) at jpaTesteSwing.View.FrameCadastro.onClickSalvar(FrameCadastro.java:51) at jpaTesteSwing.View.FrameCadastro$1.actionPerformed(FrameCadastro.java:41)


Reply

Utilizando Swing com JPA/Hibernate

Share

Rodrigo

11 months ago

Ah no tinha visto kk, vlw


Reply

Share

Rodrigo

11 months ago

Sim entendo, mas onde voce disponibilizou para download?


Reply MB allem Share

> Rodrigo

11 months ago


MB allem

No final do artigo, tem um link para o PDF do artigo e outro link para repositrio github, onde voc pode fazer o download.
Reply Share

11 months ago

Rodrigo, esse tipo de erro acontece quando tem incompatibilidade entre as verses das bibliotecas. Voc baixou as bibliotecas ou est usando as listadas no arquivo pom.xml que disponibilizei no projeto para download?
Reply

Share

Rodrigo

11 months ago

Boa noite, depois de eu adicionar todas as anotaes e bibliotecas necessrias estora o seguinte erro>>

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version). log4j:WARN Please initialize the log4j system properly. Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError: org.hibernate.cfg.AnnotationConfiguration.addProperties(Ljava/util/Properties;)Lorg/hibernate/cfg/Ann at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:756) at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:191) at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:253)
www.mballem.com/post/utilizando-swing-com-jpahibernate 18/23

18/09/13

Utilizando Swing com JPA/Hibernate

at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:125) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:78) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) at jpaTesteSwing.Dao.EntityManagerUtil.getEntityManager(EntityManagerUtil.java:12) at jpaTesteSwing.Dao.GenericDao. (GenericDao.java:21) at jpaTesteSwing.Dao.ProdutoDao. (ProdutoDao.java:8) at jpaTesteSwing.Controller.ProdutoController.salvar(ProdutoController.java:12) at jpaTesteSwing.View.FrameCadastro.onClickSalvar(FrameCadastro.java:51) at jpaTesteSwing.View.FrameCadastro$1.actionPerformed(FrameCadastro.java:41) ... Seu site timo, turtorial excelente que me ajudou muito,, agradeo de puder me ajudar. Abrao
Reply

Share

MB allem

11 months ago

Ok Rodrigo, legal que resolveu.


Reply

Share

Rodrigo

11 months ago

ae, esquece ja resolvi esse problema..


Reply

Share

Rodrigo

11 months ago

Ola, ta estorando um erro aqui, acho que tem a ver com a mesma anotao que voce disse que esta faltando, o erro >> Caused by: java.lang.ClassNotFoundException: org.hibernate.cfg.AnnotationConfiguration o erro estora na linha>> emf = Persistence.createEntityManagerFactory("testejpa");
Reply Share

MB allem 11 months ago www.mballem.com/post/utilizando-swing-com-jpahibernate

19/23

18/09/13

Utilizando Swing com JPA/Hibernate

MB allem

11 months ago

Ol Rodrigo, parece que tem alguma anotao faltando no cdigo. Mas voc pode gerar o banco de dados sem usar essa classe GeraBanco. Atravs da configurao "hibernate.hbm2ddl.auto" o Hibernate capaz de gerar as tabelas na momento que voc tentar executar algum mtodo de persistncia.
Reply

Share

Rodrigo

11 months ago

Ae amigo, seguinte aqui no meu cdigo esta dando um erro no metodo cfg.getHibernateConfiguration() , esse o erro que diz >> "'The method getHibernateConfiguration() from the type Ejb3Configuration refers to the missing type AnnotationConfiguration'"

pode me ajudar? Obrigado.


Reply

Share

MB allem

a year ago

Hello Argyria! In actually I didn't have any problem with hackers. But, in the wordpress platform, you can do backup of your posts and comments in the panel control: tools/export.
Reply

Share

A rgy ria

a year ago

Hi there! I just wanted to ask if you ever have any problems with hackers? My last blog (wordpress) was hacked and I ended up losing several weeks of hard work due to no back up.

Do you have any methods to protect against hackers?


Reply

Share

MB allem

a year ago

Ok Alisson. Por acaso voc tentou ao invs de trocar a verso do banco, trocar apenas a verso do driver-jdbc?
Reply A lis s on Share

> MBallem

a year ago

Ento, eu ia fazer isto, mas como percebi que a verso do banco estava diferente, resolvi atualizar antes j que o "padro" do nosso sistema.... www.mballem.com/post/utilizando-swing-com-jpahibernate

20/23

18/09/13


MB allem

sistema.... Acho que a soluo de trocar o driver tambm iria funcionar no caso de continuar com a verso 8.1 do banco... (ou ainda arrumar as hqls).
Reply Share

Utilizando Swing com JPA/Hibernate

a year ago

Ol Alisson, com HQL no porque no usamos HQL no exemplo e sim Criteria. Talvez possa ser a verso do banco, mas acho no tenho certeza. Qual banco voc est usando? O HSQLDB mesmo? Se for o HSQLDB, eu usei a verso 1.8.0 -> http://sourceforge.net/project... Esse problema ocorre em todo o acesso ao banco ou em uma ao especifica como salvar, alterar ou alguma consulta?
Reply A lis s on Share

> MBallem

a year ago


A lis s on

Me desculpe o engano... o que eu tentei realmente dizer que tive este problema, mas consegui resolver. Nosso sistema utilizava banco postgresql 8.4 e o cliente instalou 8.1 ento gerou esse erro,dai atualizamos e funcionou...
Reply Share

a year ago

Eu tive o mesmo seguinte problema: could not execute native bulk manipulation query. pode ser problemas com sua HQL ou a verso do banco instalada... http://coisasdetecnologia.com....
Reply

Share
a year ago

E liz a Helena

Ok. Obrigada pela dica.


Reply

Share

MB allem

a year ago

Ol Eliza Helena! Acredito que no seja possvel salvar como voc est querendo. O que voc poderia fazer salvar em campos varchar ao invs de date/datetime/timestamp.
www.mballem.com/post/utilizando-swing-com-jpahibernate 21/23

18/09/13

Utilizando Swing com JPA/Hibernate

Aqui nesse link: http://dev.mysql.com/doc/refma... tem os tipos de datas que o MySQL salva, olhe bem no final da pgina. Veja que os formatos so apenas aqueles, no possvel modificar ao salvar. Se optar por usar varchar, voc pode ter dois campos na tabela, uma para a data dd/mm e outro para a hora hh:mm.
Reply

Share
a year ago

E liz a Helena

Continuei pesquisando e vi que essa funo no serve para salva data e hora no banco e sim apenas para apresentar. Mas teria alguma forma de eu salvar as datas e horas em outro formato que no o padro do MYSQL DATETIME?
Reply

Share
a year ago

E liz a Helena

Gostaria primeiramente de parabeniz-lo pelo site. Para pessoas iniciantes em programao, assim como eu, suas explicaes so de grande valia e aproveitamento. Estou com problemas e gostaria de saber se voc poderia me ajudar. O meu programa tem dois atributos (startTime e endTime) do tipo DateTime no mysql e do tipo Date no java. No entanto o formato padro para salvar datas/horas no mysql yyyy/MM/dd hh:mm:ss. Para o

Pages
Home Author Magazines List of Posts

Popular Posts
Manipulando Arquivo Txt com Java Ler dados do teclado com a classe Scanner Chat Multi Usurios com Socket Utilizando Swing com Banco de Dados Enviando email com a API JavaMail

Email Subscription
Your email Address...

Inscreva-se para receber por e-mail um alerta sobre novas postagens.


Subscribe

Junte-se a 68 outros seguidores.

www.mballem.com/post/utilizando-swing-com-jpahibernate

22/23

18/09/13

Utilizando Swing com JPA/Hibernate

Copyright 2011-2013 - MBallem | Programando com Java - Theme by MyThemeShop, edited by mballem.com Back to Top

www.mballem.com/post/utilizando-swing-com-jpahibernate

23/23

Você também pode gostar