Você está na página 1de 19

18/09/13

DAO Generico um exemplo a pedidos Sobre Cdigo

Search

Search

Sobre Cdigo
Desenvolvimento de Software, palestras, tutoriais e treinamentos
Home Contato

links for 2006-12-27 links for 2006-12-30 Dec 27

DAO Generico um exemplo a pedidos


Categories: Dia a Dia by admin Bom, no blog da Caelum a um tempo atras fizeram um POST sobre um DAO genrico, meio bizarro Bom, eu uso um DAO genrico a algum tempo, mas o meu DAO genrico tm algumas features a mais do que o mostrado no post da caelum Neste exemplo eu ja deixo os metodos para fazer um query by example prontinho, usando a API de criteria do Hibernate bom, chega de enrolao, vamos a alguns exemplos primeiro, crio uma interface para este DAO
p a c k a g eb r . c o m . t e c h o f f i c e . s i t e . d a o ; 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 . u t i l . L i s t ; p u b l i ci n t e r f a c eT O B a s e D a o < T ,P Ke x t e n d sS e r i a l i z a b l e >{ p u b l i cC l a s sg e t O b j e c t C l a s s ( ) ; p u b l i cTs a v e ( To b j e c t ) ; p u b l i cTl o a d ( P Kp r i m a r y K e y ) ; p u b l i cTg e t ( P Kp r i m a r y K e y ) ; p u b l i cL i s tl i s t A l l ( ) ; p u b l i cL i s tf i n d B y E x a m p l e ( f i n a lTe x a m p l e ) ; p u b l i cTf i n d O n e B y E x a m p l e ( f i n a lTe x a m p l e ) ; p u b l i cL i s tl i s t A l l ( f i n a li n tf i r s t , f i n a li n tm a x ) ; p u b l i ci n tl i s t A l l P a g e C o u n t ( ) ; p u b l i cL i s tf i n d B y E x a m p l e ( f i n a lTe x a m p l e , f i n a li n tf i r s t , f i n a li n tm a x ) ; p u b l i ci n tf i n d B y E x a m p l e P a g e C o u n t ( f i n a lTe x a m p l e ) ; p u b l i cv o i du p d a t e ( To b j e c t ) ; p u b l i cv o i dd e l e t e ( To b j e c t ) ; p u b l i cv o i dr e b i n d ( To b j e c t ) ; }

onde o mtodo getObjectClass() deve retornar a classe de trabalho deste DAO, a mesma passada no parmetro T quando a interface for estendida e a implementao desta interface, fica mais ou menos assim:
p a c k a g eb r . c o m . t e c h o f f i c e . s i t e . d a o . i m p l ; 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 . u t i l . L i s t ; i m p o r to r g . a p a c h e . c o m m o n s . l o g g i n g . L o g ; i m p o r to r g . a p a c h e . c o m m o n s . l o g g i n g . L o g F a c t o r y ; i m p o r to r g . h i b e r n a t e . C r i t e r i a ; i m p o r to r g . h i b e r n a t e . H i b e r n a t e E x c e p t i o n ; 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 . E x a m p l e ; 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 . M a t c h M o d e ;

sobrecodigo.com/dao-generico-um-exemplo-a-pedidos/

1/19

18/09/13

DAO Generico um exemplo a pedidos Sobre Cdigo

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 . E x a m p l e . P r o p e r t y S e l e c t o r ; i m p o r to r g . h i b e r n a t e . t y p e . T y p e ; i m p o r to r g . s p r i n g f r a m e w o r k . o r m . h i b e r n a t e 3 . s u p p o r t . H i b e r n a t e D a o S u p p o r t ; i m p o r to r g . s p r i n g f r a m e w o r k . t r a n s a c t i o n . a n n o t a t i o n . P r o p a g a t i o n ; i m p o r to r g . s p r i n g f r a m e w o r k . t r a n s a c t i o n . a n n o t a t i o n . T r a n s a c t i o n a l ; i m p o r tb r . c o m . t e c h o f f i c e . s i t e . d a o . T O B a s e D a o ; i m p o r tb r . c o m . t e c h o f f i c e . s i t e . d a o . T O D a o L i s t e n e r ;

@ T r a n s a c t i o n a l ( p r o p a g a t i o n=P r o p a g a t i o n . R E Q U I R E D ,t i m e o u t=2 0 ) p u b l i ca b s t r a c tc l a s sT O B a s e H i b e r n a t e D a oe x t e n d sH i b e r n a t e D a o S u p p o r ti m p l e m e n t sT O B a s e D a o < T ,P K > ,P r o p e r t y S e l e c t o r{ p r i v a t es t a t i cf i n a lL o gl o g g e r=L o g F a c t o r y . g e t L o g ( T O B a s e H i b e r n a t e D a o . c l a s s ) ; p r i v a t ef i n a lC l a s so b j e c t C l a s s ; p u b l i cT O B a s e H i b e r n a t e D a o ( f i n a lC l a s so b j e c t C l a s s ){ t h i s . o b j e c t C l a s s=o b j e c t C l a s s ; } @ 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 cC l a s sg e t O b j e c t C l a s s ( ){ r e t u r no b j e c t C l a s s ; } p u b l i ci n tf i n d B y E x a m p l e P a g e C o u n t ( f i n a lTe x a m p l e ){ f i n a lL i s tl=f i n d B y E x a m p l e ( e x a m p l e ) ; f i n a lI n t e g e ri=n e wI n t e g e r ( l . s i z e ( ) ) ; r e t u r ni . i n t V a l u e ( ) ; } p u b l i ci n tl i s t A l l P a g e C o u n t ( ){ f i n a lL i s tl=l i s t A l l ( ) ; f i n a lI n t e g e ri=n e wI n t e g e r ( l . s i z e ( ) ) ; r e t u r ni . i n t V a l u e ( ) ; } / * *( n o n J a v a d o c ) * *@ s e eb r . u f r g s . h c p a . t e m p l a t e . d a o . G e t N e t B a s e D a o # f i n d O n e B y E x a m p l e ( T ) * / p u b l i cTf i n d O n e B y E x a m p l e ( f i n a lTe x a m p l e ){ f i n a lL i s tr e s=f i n d B y E x a m p l e ( e x a m p l e ,0 ,1 ) ; i f( ( r e s! =n u l l )& &( r e s . s i z e ( )= =1 ) ){ r e t u r nr e s . g e t ( 0 ) ; }e l s e{ r e t u r nn u l l ; } } p u b l i cTs a v e ( f i n a lTo b j e c t ){ t r y{ f i n a lS e s s i o ns=g e t S e s s i o n ( f a l s e ) ; s . s a v e ( o b j e c t ) ; s . f l u s h ( ) ; r e t u r no b j e c t ; }c a t c h( f i n a lH i b e r n a t e E x c e p t i o ne x ){ T O B a s e H i b e r n a t e D a o . l o g g e r . e r r o r ( e x ) ; t h r o wc o n v e r t H i b e r n a t e A c c e s s E x c e p t i o n ( e x ) ; } } p u b l i cv o i du p d a t e ( f i n a lTo b j e c t ){ t r y{ f i n a lS e s s i o ns=g e t S e s s i o n ( f a l s e ) ; s . u p d a t e ( o b j e c t ) ; s . f l u s h ( ) ; }c a t c h( f i n a lH i b e r n a t e E x c e p t i o ne x ){ T O B a s e H i b e r n a t e D a o . l o g g e r . e r r o r ( e x ) ; t h r o wc o n v e r t H i b e r n a t e A c c e s s E x c e p t i o n ( e x ) ; } } p u b l i cv o i dr e b i n d ( f i n a lTo b j e c t ){ t r y{ g e t S e s s i o n ( f a l s e ) . r e f r e s h ( o b j e c t ) ; }c a t c h( f i n a lH i b e r n a t e E x c e p t i o ne x ){ T O B a s e H i b e r n a t e D a o . l o g g e r . e r r o r ( e x ) ; t h r o wc o n v e r t H i b e r n a t e A c c e s s E x c e p t i o n ( e x ) ; } } p u b l i cv o i dd e l e t e ( f i n a lTo b j e c t ){ t r y{ g e t S e s s i o n ( f a l s e ) . d e l e t e ( o b j e c t ) ; }c a t c h( f i n a lH i b e r n a t e E x c e p t i o ne x ){ T O B a s e H i b e r n a t e D a o . l o g g e r . e r r o r ( e x ) ; t h r o wc o n v e r t H i b e r n a t e A c c e s s E x c e p t i o n ( e x ) ; } } @ 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 cTl o a d ( f i n a lP Kp r i m a r y K e y ){ t r y{ f i n a lS e s s i o ns=g e t S e s s i o n ( f a l s e ) ; f i n a lO b j e c to=s . l o a d ( o b j e c t C l a s s ,p r i m a r y K e y ) ; r e t u r n( T )o ; }c a t c h( f i n a lH i b e r n a t e E x c e p t i o ne x ){

sobrecodigo.com/dao-generico-um-exemplo-a-pedidos/

2/19

18/09/13

DAO Generico um exemplo a pedidos Sobre Cdigo


T O B a s e H i b e r n a t e D a o . l o g g e r . e r r o r ( e x ) ; t h r o wc o n v e r t H i b e r n a t e A c c e s s E x c e p t i o n ( e x ) ; }

} @ 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 cTg e t ( f i n a lP Kp r i m a r y K e y ){ t r y{ f i n a lS e s s i o ns=g e t S e s s i o n ( f a l s e ) ; f i n a lO b j e c to=s . l o a d ( o b j e c t C l a s s ,p r i m a r y K e y ) ; r e t u r n( T )o ; }c a t c h( f i n a lH i b e r n a t e E x c e p t i o ne x ){ T O B a s e H i b e r n a t e D a o . l o g g e r . e r r o r ( e x ) ; t h r o wc o n v e r t H i b e r n a t e A c c e s s E x c e p t i o n ( e x ) ; } } @ 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 tl i s t A l l ( ){ t r y{ f i n a lS e s s i o ns=g e t S e s s i o n ( f a l s e ) ; f i n a lC r i t e r i ac=s . c r e a t e C r i t e r i a ( o b j e c t C l a s s ) ; a d d O r d e r T o C r i t e r i a ( c ) ; r e t u r nc . l i s t ( ) ; }c a t c h( f i n a lH i b e r n a t e E x c e p t i o ne x ){ T O B a s e H i b e r n a t e D a o . l o g g e r . e r r o r ( e x ) ; t h r o wc o n v e r t H i b e r n a t e A c c e s s E x c e p t i o n ( e x ) ; } } @ 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 tf i n d B y E x a m p l e ( f i n a lTe x a m p l e ){ t r y{ f i n a lS e s s i o ns=g e t S e s s i o n ( f a l s e ) ; f i n a lC r i t e r i ac=s . c r e a t e C r i t e r i a ( o b j e c t C l a s s ) ; c . a d d ( E x a m p l e . c r e a t e ( e x a m p l e ) . e n a b l e L i k e ( M a t c h M o d e . A N Y W H E R E ) . i g n o r e C a s e ( ) . s e t P r o p e r t y S e l e c t o r ( t h i s ) ) ; a d d O r d e r T o C r i t e r i a ( c ) ; a d d P r o p e r t i e d T o C r i t e r i a ( c ,e x a m p l e ) ; r e t u r nc . l i s t ( ) ; }c a t c h( f i n a lH i b e r n a t e E x c e p t i o ne x ){ T O B a s e H i b e r n a t e D a o . l o g g e r . e r r o r ( e x ) ; t h r o wc o n v e r t H i b e r n a t e A c c e s s E x c e p t i o n ( e x ) ; } } p r o t e c t e dv o i da d d P r o p e r t i e d T o C r i t e r i a ( f i n a lC r i t e r i ac ,f i n a lTe x a m p l e ){ } @ 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 tf i n d B y E x a m p l e ( f i n a lTe x a m p l e ,f i n a li n tf i r s t ,f i n a li n tm a x ){ t r y{ f i n a lS e s s i o ns=g e t S e s s i o n ( f a l s e ) ; f i n a lC r i t e r i ac=s . c r e a t e C r i t e r i a ( o b j e c t C l a s s ) ; c . a d d ( E x a m p l e . c r e a t e ( e x a m p l e ) . e n a b l e L i k e ( M a t c h M o d e . A N Y W H E R E ) . i g n o r e C a s e ( ) . s e t P r o p e r t y S e l e c t o r ( t h i s ) ) ; a d d P r o p e r t i e d T o C r i t e r i a ( c ,e x a m p l e ) ; a d d O r d e r T o C r i t e r i a ( c ) ; i f( f i r s t! =0 ){ c . s e t F i r s t R e s u l t ( f i r s t ) ; } i f( m a x! =0 ){ c . s e t M a x R e s u l t s ( m a x ) ; } r e t u r nc . l i s t ( ) ; }c a t c h( f i n a lH i b e r n a t e E x c e p t i o ne x ){ T O B a s e H i b e r n a t e D a o . l o g g e r . e r r o r ( e x ) ; t h r o wc o n v e r t H i b e r n a t e A c c e s s E x c e p t i o n ( e x ) ; } } @ 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 tl i s t A l l ( f i n a li n tf i r s t ,f i n a li n tm a x ){ t r y{ f i n a lS e s s i o ns=g e t S e s s i o n ( f a l s e ) ; f i n a lC r i t e r i ac=s . c r e a t e C r i t e r i a ( o b j e c t C l a s s ) ; a d d O r d e r T o C r i t e r i a ( c ) ; i f( f i r s t! =0 ){ c . s e t F i r s t R e s u l t ( f i r s t ) ; } i f( m a x! =0 ){ c . s e t M a x R e s u l t s ( m a x ) ; } r e t u r nc . l i s t ( ) ; }c a t c h( f i n a lH i b e r n a t e E x c e p t i o ne x ){ T O B a s e H i b e r n a t e D a o . l o g g e r . e r r o r ( e x ) ; t h r o wc o n v e r t H i b e r n a t e A c c e s s E x c e p t i o n ( e x ) ; } } p r o t e c t e dv o i da d d O r d e r T o C r i t e r i a ( C r i t e r i ac ){ } p u b l i cb o o l e a ni n c l u d e ( O b j e c tp r o p e r t y V a l u e ,S t r i n gp r o p e r t y N a m e ,T y p et y p e ){ i f ( ( p r o p e r t y V a l u e ! = n u l l )& &( p r o p e r t y V a l u ei n s t a n c e o fS t r i n g ) ) { r e t u r n! " " . e q u a l s ( ( ( S t r i n g ) p r o p e r t y V a l u e ) . t r i m ( ) ) ; } r e t u r np r o p e r t y V a l u e ! = n u l l ; }

sobrecodigo.com/dao-generico-um-exemplo-a-pedidos/

3/19

18/09/13
}

DAO Generico um exemplo a pedidos Sobre Cdigo

onde o mtodo addOrderToCriteria, permite que subclasses deste DAO ordenem as consultas o mtodo addPropertiedToCriteria permite que subclasses adicionem propriedades no incluidas pelo hibernate nas consultas e o mtodo include combinado com o setPropertySelector da classe Example uma melhoria adicionada a pouco tempo, que faz o mesmo que o addPropertiedToCriteria, mas de forma automtica, ou seja, inclui as propriedades PK e FK tambm na QBE Bom, depois disto tudo, s falta criar o DAO para alguma entidade persistida pelo Hibernate, como por exemplo uma classe Curriculo Criamos a interface do nosso DAO:
p a c k a g eb r . c o m . t e c h o f f i c e . s i t e . d a o ; i m p o r tb r . c o m . t e c h o f f i c e . s i t e . d a t a . C u r r i c u l o ; p u b l i ci n t e r f a c eC u r r i c u l o D a oe x t e n d sT O B a s e D a o { }

e logo depois a implementao deste DAO:


p a c k a g eb r . c o m . t e c h o f f i c e . s i t e . d a o . i m p l ; i m p o r tn e t . j a v a . d e v . s p r i n g a n n o t a t i o n . a n n o t a t i o n . B e a n ; i m p o r tb r . c o m . t e c h o f f i c e . s i t e . d a o . C u r r i c u l o D a o ; i m p o r tb r . c o m . t e c h o f f i c e . s i t e . d a t a . C u r r i c u l o ; @ B e a n ( n a m e = " c u r r i c u l o D a o " ) p u b l i cc l a s sC u r r i c u l o D a o I m p le x t e n d sT O B a s e H i b e r n a t e D a oi m p l e m e n t sC u r r i c u l o D a o{ 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 ; p u b l i cC u r r i c u l o D a o I m p l ( ){ s u p e r ( C u r r i c u l o . c l a s s ) ; } }

acho que era isto, o que acharam deste DAO genrico? pela minha experincia, ele resolve de maneira estupidamente fcil em torno de 60% dos meus problemas de persistencia, nos outros 40% ai necessrio criar algum outro metodo de pesquisa especializado para cada situao mas acho que esta a ideia das coisas genricas, facilitar a maior parte do trabalho e permitir que a menor parte seja feita com um pouquinho de trabalho extra acham? Tags: Java o que vocs

Profile
Sign in with Twitter Sign in with Facebook or Name Email Website
Not published

Message: *
Post It

71 Replies 71 Comments 0 Tweets 0 Facebook 0 Pingbacks Last reply was June 22, 2010

1.

Alexandre View December 27, 2006 PERFEITO ESSE DAO! Urubatan muito bom post. Muito bem explicado!!!

sobrecodigo.com/dao-generico-um-exemplo-a-pedidos/

4/19

18/09/13

DAO Generico um exemplo a pedidos Sobre Cdigo

Parabens amigo!!! Reply 2. Rodrigo Guedes de Souza View December 27, 2006 Urubatan eu tinha visto este seu DAO num workshop no webdays, ficou muito bom mesmo .. Reply 3. Gcen View December 28, 2006 Parabns pelo trabalho que vem realizando pela comunidade, h algum tempo acompanho, ento resolvi deixar meu recado Reply 4. Thiago View December 28, 2006 Opa Uburatan ta show esse dao genrico, parabns. Tenho umas duvidas simples. esse Propagation.REQUIRED est dizendo que a transao obrigatria para todos os mtodos? aquele mesmo esquema quando declarado via xml? E a respeito do include ai, voc explicou mas eu fiquei viajando, poderia explicar de outra forma ou passar algum link? Como voc est utilizando o HibernateDaoSuport, teria alguma vantagem se utilizasse o mtodo getHibernateTemplate() e/ou utilizar aquele esquema da interfacer HibernateCallback ? Uma correo besta que no mtodo get est utilizando load ou invs de get. Reply 5. Urubatan View January 2, 2007 Valeus Gcen Thiago, o Propagation.REQUIRED do spring, e sim, quando ele esta anotando uma classe diz que todos os metodos requerem uma transao quanto ao include, o esquema que o QueryByExample do Hibernate no inclui campos de relacionamento e PKs, aquele include chamado quando eu chamo [java] Example.create(example).enableLike(MatchMode.ANYWHERE).ignoreCase().setPropertySelector(this) [/java] ou seja, o callback do property selector do hibernate apenas e quanto a HibernateTemplate X convertHibernateAccessException(ex); uso a segunda opo por que acho mais bonito s, mas no vejo nenhuma razo concreta para usar uma ou a outra abordagem Reply 6. Thiago View January 3, 2007 Ol Urubatan, entendi agora, vlw. S mais uma duvida. E a respeito do objectClass que passado como construtor das classes concretas, ele realmente preciso j que estamos passando o tipo via generics? eu vi no blog da caleum um artificio que no precisaria dessa classe, conforme no link abaixo: http://blog.caelum.com.br/2006/10/29/brincando-com-generics-o-bizarregenericdao/ o que voc acha dessa soluo? Reply 7. Tetsuo View January 3, 2007 Eu tb escrevi um pouco sobre a classe que passada no construtor (ou melhor, sobre a mgica necessria pra elimin-lo): http://javapub.blogspot.com/2006/12/generics-reflection-hierarquias-de.html No fim, eu achei melhor manter essa passagem por parmetro do que me aventurar nessa zona obscura Reply

sobrecodigo.com/dao-generico-um-exemplo-a-pedidos/

5/19

18/09/13

DAO Generico um exemplo a pedidos Sobre Cdigo

8.

Diogo Cabral View January 8, 2007 Oi, O dao ficou muito bom. Gostaria de saber se voc no acha mais interessante algo como return listAll().size() no lugar de instanciar um Integer nos mtodos de page count? Abraos Reply

9.

Urubatan View January 8, 2007 realmente seria melhor no lembro por que esta implementado desta forma, deve ter ficado assim em alguma das metamorfoses sofridas por este DAO durante o tempo de vida dele e eu no prestei ateno :S Vaoeu a dica Reply

10.

Juan Damasceno View January 29, 2007 Legal, muito boa implementao, existiria alguma forma de injetar o objectClass pelo Spring? Reply

11.

Diego Pires Plentz View February 12, 2007 Urubatan, por curiosidade, porque voc chama o flush() aps o save() e update()? Reply

12.

Urubatan View February 12, 2007 sim, possivel injetar o objectClass pelo spring e diego, eu realmente no lembro o por que do flush, acho que no projeto em que eu fiz isto, estava dando algum bug de batch update e eu tentei resolver assim antes de desabilitar o batch update do hibernate Reply

13.

ronildojunior View February 14, 2007 Muito bom o DAO So uma duvida nao seria melhor ter uma classe de negocio e colocar a anotacao dizendo que requirido uma trasacao nela por exemplo: @Transactional(propagation = Propagation.REQUIRED, timeout = 20) public class ContaCorrente(){ public retirar(){ ContaDAO conta = factory.getContaDAO(); UsuarioDAO usuario = factory.getUsuarioDAO(); } } assim todos os DAOs estariam dentro de uma mesma transacao eu faco uma implementacao assim Reply

14.

Urubatan View February 14, 2007 A vantagem desta abordagem que a configurao mais externa a que vale. por exemplo, estou dizendo que os metodos do DAO requerem uma transao, isto no quer dizer uma transao nova por tanto, se no business, o metodo necessitar de uma transao, sera criada uma transao para aquele metodo, e todas as chamadas de dao de dentro daquele metodo utilizaro a mesma transao, por tanto, todas as chamadas estaro dentro da mesma transao assim a transao sera maior, e ainda assim atomica. mas caso o metodo do business no precisar de uma transao, sero criadas pequenas transaes para cada chamada a um metodo de um DAO. ou seja, fica valendo a maior transao

sobrecodigo.com/dao-generico-um-exemplo-a-pedidos/

6/19

18/09/13

DAO Generico um exemplo a pedidos Sobre Cdigo

Reply 15. Mrio Dantas View February 16, 2007 Ol Urubatan, primeiramente parabns pelo trabalho, tenho uma dvida sobre transao. Por exemplo em uma transao em que eu tenha q inserir dados de uma nova venda e dados de itens dessa venda, essa implementao do Dao genrico contempla esse tipo de situao ou tenho que fazer isso por fora. inicio da transacao daoVenda.salvar(venda); daoItens.salvar(itens); fim da transacao algo onde a transao deveria ser mais ou menos assim, um exemplo tosco s para ter um idia. Mais uma vez parabns pela iniciativa. Reply 16. Urubatan View February 16, 2007 Mrio, da uma olhada no meu comentrio anterior que explica exatamente isto Reply 17. Mrio Dantas View February 16, 2007 Beleza, pensei que com objetos de daos diferentes ele fazia diferentes transacoes. Valeu. Reply 18. ronildo View April 9, 2007 Ola Copiando o que vc escreveu: A vantagem desta abordagem que a configurao mais externa a que vale. por exemplo, estou dizendo que os metodos do DAO requerem uma transao, isto no quer dizer uma transao nova Gostaria de saber como vc fez para trabalhar com essa abordagem, o seu artigo explica detalhes de como funciona o DAO generic, que por sinal muito bom, mas nao explica como fazer o controle de transao. Vc tem algum material explicando como fazer ? Obrigado. Reply 19. Urubatan View April 13, 2007 Ronildo, desculpe a demora na resposta, no tinha visto a pergunta o controle de transaes funciona exatamente como em um session bean com CMT, ou seja, vale a transao de maior escopo demarcao para a classe vale para todos os mtodos demarcao no mtodo sobre escreve a da classe e se tem todas as opes de propagao de transaes que existem nos EJBs. mais informaes sobre isto na documentao dos EJBs ou na documentao do spring Reply 20. Lucas Hngaro View April 17, 2007 Urubatan, gostei da sua implementao do TOBaseHibernateDao e passei a utilizar algo bem semelhante como base para meus Daos. Utilizo tambm uma factory para os Daos, mas estou com um problema com as transaes: Erro: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here Pesquisei bastante sobre isso, mas no encontrei uma soluo. Consigo fazer com o funcione se chamar getSession(true), isto , permitindo que uma transao seja criada nesse momento, o que no recomendado, pelo que li. Como voc configura seu applicationContext para usar essa implementao? Outra dvida, relativa pergunta do Mrio Dantas: como eu consigo comear e finalizar uma transao por fora dos Daos, j que eles no expe os mtodos relativos
sobrecodigo.com/dao-generico-um-exemplo-a-pedidos/ 7/19

18/09/13

DAO Generico um exemplo a pedidos Sobre Cdigo

session? Reply 21. Thiago View April 17, 2007 D uma conferida aqui Lucas. http://pastebin.co.uk/13149 Reply 22. Lucas Hngaro View April 17, 2007 Valeu Thiago! Havia encontrado algo semelhante aqui uns minutos antes de voc postar e me deparei com outro erro. Usei o que voc postou (achei melhor do que o que eu havia encontrado, pois especifica mais nveis de isolamento). Porm, agora estou com outro erro Fao um listAll() numa classe Cliente. Essa classe possui uma Collection com lazy loading. Para buscar os clientes d tudo certo. Porm, quando tento iterar pela coleo de pedidos:

E x c e p t i o ni nt h r e a d" m a i n "o r g . h i b e r n a t e . L a z y I n i t i a l i z a t i o n E x c e p t i o n :f a i l e dt ol a z i l yi n i t i a l i z eac o l l e c t i o no fr o l e : c o m . l e c o m . t e c n o l o g i a . m o d e l . C l i e n t e . p e d i d o s ,n os e s s i o no rs e s s i o nw a sc l o s e d a t o r g . h i b e r n a t e . c o l l e c t i o n . A b s t r a c t P e r s i s t e n t C o l l e c t i o n . t h r o w L a z y I n i t i a l i z a t i o n E x c e p t i o n ( A b s t r a c t P e r s i s t e n t C o l l e c t i o n . j a v a : 3 5 8 ) a t a to r g . h i b e r n a t e . c o l l e c t i o n . A b s t r a c t P e r s i s t e n t C o l l e c t i o n . i n i t i a l i z e ( A b s t r a c t P e r s i s t e n t C o l l e c t i o n . j a v a : 3 4 3 ) a to r g . h i b e r n a t e . c o l l e c t i o n . A b s t r a c t P e r s i s t e n t C o l l e c t i o n . r e a d ( A b s t r a c t P e r s i s t e n t C o l l e c t i o n . j a v a : 8 6 ) a to r g . h i b e r n a t e . c o l l e c t i o n . P e r s i s t e n t S e t . i t e r a t o r ( P e r s i s t e n t S e t . j a v a : 1 6 3 ) a tc o m . l e c o m . t e c n o l o g i a . m a i n . T e s t e r . t e s t ( T e s t e r . j a v a : 2 9 ) a tc o m . l e c o m . t e c n o l o g i a . m a i n . M a i n . m a i n ( M a i n . j a v a : 1 7 )

o r g . h i b e r n a t e . c o l l e c t i o n . A b s t r a c t P e r s i s t e n t C o l l e c t i o n . t h r o w L a z y I n i t i a l i z a t i o n E x c e p t i o n I f N o t C o n n e c t e d ( A b s t r a c t P e r s i s t e n t C o l l e c t i o n . j a v a : 3

Pelo jeito a sesso est sendo perdida. O logger me retorna algumas coisas relacionadas a isso (aps selecionar os clientes com sucesso):

D E B U G[ m a i n ]( T r a n s a c t i o n A s p e c t S u p p o r t . j a v a : 3 0 5 )-C o m p l e t i n gt r a n s a c t i o nf o r[ c o m . l e c o m . t e c n o l o g i a . d a o . I G e n e r i c D a o . l i s t A l l ] D E B U G[ m a i n ]( A b s t r a c t P l a t f o r m T r a n s a c t i o n M a n a g e r . j a v a : 8 1 9 )-T r i g g e r i n gb e f o r e C o m m i ts y n c h r o n i z a t i o n D E B U G[ m a i n ]( A b s t r a c t P l a t f o r m T r a n s a c t i o n M a n a g e r . j a v a : 8 3 2 )-T r i g g e r i n gb e f o r e C o m p l e t i o ns y n c h r o n i z a t i o n D E B U G[ m a i n ]( T r a n s a c t i o n S y n c h r o n i z a t i o n M a n a g e r . j a v a : 1 9 0 )-R e m o v e dv a l u e [ o r g . s p r i n g f r a m e w o r k . o r m . h i b e r n a t e 3 . S e s s i o n H o l d e r @ 3 b 4 b 1 e ]f o rk e y[ o r g . h i b e r n a t e . i m p l . S e s s i o n F a c t o r y I m p l @ c 0 a 9 f 9 ]f r o mt h r e a d [ m a i n ] D E B U G[ m a i n ]( A b s t r a c t P l a t f o r m T r a n s a c t i o n M a n a g e r . j a v a : 8 4 5 )-T r i g g e r i n ga f t e r C o m m i ts y n c h r o n i z a t i o n D E B U G[ m a i n ]( A b s t r a c t P l a t f o r m T r a n s a c t i o n M a n a g e r . j a v a : 8 6 1 )-T r i g g e r i n ga f t e r C o m p l e t i o ns y n c h r o n i z a t i o n D E B U G[ m a i n ]( S e s s i o n F a c t o r y U t i l s . j a v a : 7 8 1 )-C l o s i n gH i b e r n a t eS e s s i o n D E B U G[ m a i n ]( T r a n s a c t i o n S y n c h r o n i z a t i o n M a n a g e r . j a v a : 2 7 2 )-C l e a r i n gt r a n s a c t i o ns y n c h r o n i z a t i o n

Alguma idia? Reply 23. Thiago View April 17, 2007 Ai nesse caso, voc tem que carregar a coleo de pedidos antecipadamente, pois quando voc tenta acessa-la a sesso j foi fechada por isso da o lazy. Vai l na documentao do hibernate e procura sobre fetch, voc pode setar no seu mapeamento como default para sempre carregar a coleo, ou no metodo que estiver realizando a query, via criteria ou hql, especificar se deve carregar ou no. Reply 24. Lucas Hngaro View April 17, 2007 Pois , nas buscas que eu fiz encontrei isso mesmo. Ele fecha a sesso aps cada transao, ento ao tentar pegar a lista de pedidos vai dar erro pois j outra sesso A minha dvida : por esse motivo perco o benefcio de desempenho que ganho com o lazy loading? No h outro jeito a no ser fazer a query novamente utilizando left join fetch? Reply 25. Urubatan View April 17, 2007 ma soluo para isto se voc estiver utilizando Hibernate sem o spring (o que parece por causa da factory que voc mencionou) mudar na configuraco do hibernate para managed sessions, assim voc cria e destroi as sessions.
sobrecodigo.com/dao-generico-um-exemplo-a-pedidos/ 8/19

18/09/13

DAO Generico um exemplo a pedidos Sobre Cdigo

caso esteja utilizando o spring utilize algo parecido com isto: [java] SessionHolder sessionHolder = (SessionHolder) TransactionSynchronizationManager.getResource(getSessionFactory()); if(sessionHolder==null){ TransactionSynchronizationManager.bindResource(getSessionFactory(),new SessionHolder(getSessionFactory().openSession()); }[/java] no se esquea que fazendo isto voc o responsvel por fechar a sesso tambm Reply 26. Urubatan View April 17, 2007 PS.: eu achei muito legal outro visitante do blog responder uma duvida em um comentrio Muito obrigado Thiago. Reply 27. Lucas Hngaro View April 17, 2007 Muito legal a inciativa do Thiago mesmo. Urubatan, estou usando o Spring sim. uma prtica ruim usar uma DaoFactory com Spring? No tenho o cdigo agora, est no trabalho, mas fiz mais ou menos o seguinte: Uma interface genrica, semelhante a sua TOBaseDao. Uma classe abstrata com a implementao dessa interface para o hibernate, como a classe TOBaseHibernateDao. Uma interface genrica para a DaoFactory, com mtodos como: public IClienteDao getClienteDao; Uma interface e implementao para cada Dao, onde posso colocar mtodos especficos. A implementao da factory possui os atributos (as interfaces dos Daos) que so injetadas via mtodo set pelo Spring. Nas classes que consomem os Daos, tenho apenas a interface da factory como atributo e a implementao injetada pelo Spring. Obrigado pelo retorno, vou tentar isso no trabalho amanh (trabalho da faculdade hoje =/ ). Sobre a minha segunda pergunta no primeiro post, alguma orientao? A mais bvia que vejo seria colocar dentro de um Dao chamadas a outros, fazendo tudo na transao do primeiro, mas acho que isso no muito bom Reply 28. Lucas Hngaro View April 18, 2007 Como no quero ter que controlar a sesso, fiz o seguinte: antes de acessar a coleo de pedidos, uso o mtodo clienteDao.rebind(cliente). Agora ele usa uma transao para buscar os clientes e depois uma transao para buscar cada lista de pedidos. Funciona, mas achei bem feio De acordo com o que pesquisei, o padro OpenSessionInView resolve isso, est correto? Reply 29. Urubatan View April 18, 2007 esta soluo do rebind funciona tambm mas prende o teu cdigo a api do Hibernate se isto no estiver sendo feito dentro de um DAO. se bem que no exatamente um problema prender o cdigo a API do Hibernate PS.: o OpenSessionInView tambm resolve isto Reply 30. Lucas Hngaro View April 18, 2007 Urubatan, como voc costuma contornar essa situao? Ou voc no utiliza lazy loading? Reply 31. Thiago View April 18, 2007 Opa, vlw pessoal. Eu no custumo utilizar muito lazy loading, pelo menos no projeto no qual estou envolvido. Como utilizo ajax, via DWR, quando realizo as consultas geralmente trago tudo que eu quero, como o sistema no lida com grande volume de dados creio que no tem problemas, fora que realizo paginaes para trazer uma quantidade limitada de dados.
sobrecodigo.com/dao-generico-um-exemplo-a-pedidos/ 9/19

18/09/13

DAO Generico um exemplo a pedidos Sobre Cdigo

Reply 32. Urubatan View April 18, 2007 Lucas, eu uso lazy bastante e como a maior parte das apps web, o OpenSessionInView ja resolve o meu problema quando trabalho com ajax procuro no utilizar as mesmas entidades (hoje estou fazendo isto e estou transformando em HashMaps os valores transferidos via ajax. e quando o OpenSessionInView no resolve, como esta semana que tive que implementar um wizard com a sesso aberta durante todo o wizard, eu copiei o OpenSessionInView filter do Spring, e fiz com que quando eu estivesse no wizard, ele armazenasse a session na HttpSession e usando um cdigo parecido com: [java] SessionHolder sessionHolder = (SessionHolder) TransactionSynchronizationManager.getResource(getSessionFactory()); if(sessionHolder==null){ TransactionSynchronizationManager.bindResource(getSessionFactory(),new SessionHolder(getSessionFactory().openSession()); } [/java] ele enquanto ainda no wizard, recuperasse a sesso do HttpSession e utilizasse a mesma durante todo o wizard mas como sempre, a soluo mais apropriada, depende de cada situao Reply 33. Lucas Hngaro View April 18, 2007 Legal por enquanto estou apenas testando o Spring com Hibernate, ento estou escrevendo uma aplicao console mesmo. Esse esquema do SessionHolder funcionou bem, apenas adicionei o unbinding antes de finalizar a aplicao:

T r a n s a c t i o n S y n c h r o n i z a t i o n M a n a g e r . u n b i n d R e s o u r c e ( t h i s . s e s s i o n F a c t o r y ) ; S e s s i o n F a c t o r y U t i l s . r e l e a s e S e s s i o n ( s e s s i o n ,t h i s . s e s s i o n F a c t o r y ) ;

Estou fazendo uma aplicao tambm em .NET com NHibernate e l costumo colocar a session no HttpSession tambm funciona =D Alguma opinio sobre a minha implementao com factory? Estive pensando: seria bom eu configurar os beans dos Daos como lazy-init? Acho que seria uma boa, j que na factory eu tenho a injeo de todos os Daos, mas no vou utilizar todos sempre. Reply 34. Urubatan View April 18, 2007 bom, sobre a factory containers IoC foram criados para que ninguem mais utilizasse factories por tanto, ou tu utiliza o spring ou a tua dao factory, no as duas coisas junto mas esta s a minha opinio Reply 35. Lucas Hngaro View April 18, 2007 Sim, faz sentido na verdade essa factory no t criando nada, ela apenas retorna os daos que so injetados, ento ela acaba perdendo a semntica de criadora, passando a ser apenas um objeto agregador, ou seja, acaba no sendo uma factory de verdade. Vi muita gente usando Spring e Castle Windsor (container IoC pra .NET) com essa factory, ento acabei fazendo da mesma forma. Vou procurar saber mais sobre isso. Obrigado pela ajuda! Reply 36. Gess View July 10, 2007 Ol Urubatan, Primeio gostaria de parabenizar pelo DAO genrico que vc construi. Desenvolvi um dao bem parecido com esse a, s que o nico problema a que tenho que criar uma classe dao concreta para todas as minhas classes persistveis. H alguma forma de isso no ser necessrio? Reply

sobrecodigo.com/dao-generico-um-exemplo-a-pedidos/

10/19

18/09/13

DAO Generico um exemplo a pedidos Sobre Cdigo

37.

Urubatan View July 10, 2007 s alterar ele para passar o objectClass como parametro para o mtodo que precisar dele Reply

38.

Marcos Peron View August 6, 2007 Ol, Muito bom seu artigo!! So fiquei com uma dvida: E se eu quisesse que uma classe CurriculoDireito que estende Curriculo tivesse tambm um DAO que extendesse o DAO de Curriculo, como proceder? public interface CurriculoDAO extends TOBaseDao{ public List getCurriculosByName(); } Estou batendo a cabea aqui mas no acho soluo. public interface CurriculoDireitoDAO extends CurriculoDAO { // este deve ser implicito // public List getCurriculosByName(); public List getCurriculoEstruturaDireito(); } uma sugesto meio tosca, mas o que eu gostaria era de poder Herdar os metodos das interfaces dos DAOs.. Postei uma dvida sobre isso no GUJ, e me direcionaram para seu blog http://www.guj.com.br/posts/list/66036.java se voc tiver alguma idia, seria muito grato. vlw Abraos e parabns! Reply

39.

Urubatan View August 6, 2007 no entendi a dvida este DAO genrico no atrabalha em nada a utilizao de herana Reply

40.

Maria sanches View September 14, 2007 para dar um exemplo de um blog Reply

41.

Hewerton View October 2, 2007 Urubatan, poderia me explicar como funciona exatamente este mtodo public List findByExample(final T example, final int first, final int max) Reply

42.

alexandre View October 20, 2007 Urubatan esse T quer dizer o que mesmo ?que um tipo indefinido ? Reply

43.

Urubatan View October 20, 2007 alexandre, isto a sintaxe de generics do Java 5

sobrecodigo.com/dao-generico-um-exemplo-a-pedidos/

11/19

18/09/13

DAO Generico um exemplo a pedidos Sobre Cdigo

Reply 44. Gilberto santos View January 18, 2008 ola urubatan. sobre sua primeira classe TOBaseDao certez Reply 45. Gilberto santos View January 18, 2008 ola urubatan. sobre sua primeira classe TOBaseDao bom, como ela implementa classe Generic sem receber o parametro TOBaseDao essa e minha duvida ! abs. Reply 46. Alexandre View April 13, 2008 Algum exemplo sem utilizar spring? com struts 2 Reply 47. Fabio View May 18, 2008 Achei bem legal essa classe, muito til tambm. Sobre os mtodos para contar regitros, fico meio preocupado, pois caso a tabela seja muito grande, todos os registros sero carregados? No teria como fazer uma verificao s da qtde, como faramos com o SQL (select count(*) from tabela)? Valeu Reply 48. Rafael Antunes View September 26, 2008 Meio tarde mas se ajudar ainda: Fabio em uma entidade se vc mapear ela com @LazyCollection(LazyCollectionOption.EXTRA) O hibernate fica mais esperto no carregamento lazy, se vc der somente um size(), ele ira dar um count, tambem fica mais esperto quanto ao contains, verifica pelo banco em vez de carregar a lista e verificar em memoria. Reply 49. Raphel View December 10, 2008 Ol Urubatan, Eu utilizo hibernate(jpa) com um dao genrico e funciona perfeitamente, exceto quando tento inserir uma entidade que herda outra entindade abstrata. Eu uso apenas um dao para todas as entidades filhas e por padro o dao recebe o .class da entidade pai. Isto funciona perfeitamente para consultas polimrficas, porm ao inserir as classes filhas apenas os atributos herdados so persistidos. possvel fazer uma insero polimrfica atravs do dao da entidade pai? Reply Urubatanreplied: View December 11, 2008 possvel sim, provavelmente voc esqueceu de colocar o @Entity nas classes filhas Reply Raphaelreplied: View January 27, 2009 Valeu!!!

sobrecodigo.com/dao-generico-um-exemplo-a-pedidos/

12/19

18/09/13

DAO Generico um exemplo a pedidos Sobre Cdigo

Eu j havia corrigido o problema e realmente era uma anotao da classe. Na anotao @Column de um atributo eu coloquei insertable=false, por pensar que funcionava de outra forma. Depois que arrumei funcionou corretamente. Reply 50. Francisco Rafael View January 23, 2009 Desculpe minha falta de informao, mas no entendi como utilizar esta implementao, para cada classe minha cliente, produto vou ter que implementar um DAO? gostaria de fazer um classe generica onde passar o objeto e l dentro tratar tudo generico pelo que vi este exemplo faz isso, mas no entendi como utilizar esta interface ser que algum poderia dar um exemplo de como instanciar um objeto utilizando esta implemenao? Reply 51. Raphael View January 27, 2009 Bom dia Francisco, No meu caso eu tenho um DAO genrico que contm apenas os mtodos que so comuns a todas as entidades, o mesmo abstrato. Os demais daos herdam o dao genrico. Porm por questes de manutenabilidade e tambm por utilizar o spring, o struts 2 e o hibernate (obs: acredito que nenhum dos frameworks obriga o uso de interface), todas as minhas daos possuem uma interface e nas Actions (Struts 2) eu delcaro as minhas instncias com a Interface e o Spring se encarrega de criar a intncia correspondente e injet-lo na Action. import scfc.model.dao.ChamadoDAO; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.Preparable; public class ManterOrdemServico extends ActionSupport implements Preparable, SessionAware{ //interface private ChamadoDAO chamadoDao; // } Desse modo, caso eu queira mudar a implementao do meu dao generico basta criar uma nova classe que implemente a interface da minha entidade e que herde a nova implementao da classe genrica. E no xml de configurao do spring, basta mudar a classe para a nova. Isso facilita mto, pois esse tipo de alterao torna-se transparente para o restante do sistema. public interface GenericDAO { void save(T entity); void update(T entity); void remove(T entity); T find(ID id); List findAll(); T getReference(ID id); } @Transactional public abstract class GenericImplDAO implements GenericDAO{ private Class persistentClass; @PersistenceContext private EntityManager em; @SuppressWarnings(unchecked) public GenericImplDAO(){ this.persistentClass = (Class)((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; } public void setEm(EntityManager em) { this.em = em; } protected EntityManager getEm() {
sobrecodigo.com/dao-generico-um-exemplo-a-pedidos/ 13/19

18/09/13

DAO Generico um exemplo a pedidos Sobre Cdigo

return em; } public Class getPersistentClass() { return persistentClass; } @Override public void save(T entity) { em.persist(entity); } @Override public void update(T entity){ em.merge(entity); } @Override public void remove(T entity) { em.remove(entity); } @Override public T find(ID id) { return em.find(getPersistentClass(), id); } @Override public List findAll() { return findByCriteria(); } @SuppressWarnings(unchecked) protected List findByCriteria(Criterion criterion) { Session session = (Session) em.getDelegate(); Criteria crit = session.createCriteria(getPersistentClass()); for (Criterion c : criterion) { crit.add(c); } return crit.list(); } @SuppressWarnings(unchecked) protected List findByCriteria(Order o, Criterion criterion) { Session session = (Session) em.getDelegate(); Criteria crit = session.createCriteria(getPersistentClass()); for (Criterion c : criterion) { crit.add(c); } crit.addOrder(o); return crit.list(); } @Override public T getReference(ID id) { return getEm().getReference(getPersistentClass(), id); } } public interface ServicoDAO extends GenericDAO { List findAllForContrato(Categoria cat); } public class ServicoImplDAO extends GenericImplDAO implements ServicoDAO { @Override public List findAllForContrato(Categoria categoria) { Conjunction c = Restrictions.conjunction();
sobrecodigo.com/dao-generico-um-exemplo-a-pedidos/ 14/19

18/09/13

DAO Generico um exemplo a pedidos Sobre Cdigo

c.add(Expression.eq(contrato, true)); c.add(Expression.eq(categoria, categoria)); return findByCriteria(c); } } Espero ter ajudado. Reply Leonardoreplied: View April 16, 2009 Raphael, voc poderia dar mais detalhes da sua integrao entre Struts2 + Spring + Hibernate(JPA) ao qual se referiu no seu post? Poderia postar o applicationContext? orbigado, Leonardo Reply Raphaelreplied: View April 17, 2009 Exemplo de um applicationContext.xml. <! Alternativa caso queira configurar a conexo com o banco direto da aplicao > Na documentao do Spring mostra outras alternativas para algumas configuraes. No site do Struts 2 (verso 0) tem um exemplo de intregralo entre eles, h tambm um exemplo de integrao no site da revista java magazine. Mas se sugirem dvidas posta ai. Reply Raphaelreplied: View April 17, 2009 Ops deu algum erro na hora de postar. segue novamente o applicationContext.xml. <! Alternativa caso queira configurar a conexo com o banco direto da aplicao > Reply Raphaelreplied: View April 17, 2009 Troquei o smbolo de comentrio do xml por //, vamos ver se agora vai. // Usa o JNDI configurado no Container // Alternativa caso queira configurar a conexo com o banco direto da aplicao // // // // // // // Atentar-se para a propriedade database, ela corresponder ao seu banco. // Veja na documentao do spring qual o valor que voc deve colocar. // Reply 52. Francisco Rafael View January 27, 2009 Muito obrigado ajudou sim, e esclareceu bastante dvidasvlw cara. Reply

sobrecodigo.com/dao-generico-um-exemplo-a-pedidos/

15/19

18/09/13

DAO Generico um exemplo a pedidos Sobre Cdigo

53.

Anderson View March 31, 2009 Ol urubatan, esse tutorial foi feito em dezembro de 2006. At hoje tenho procurado alguma coisa mas recente sobre isso e no tenho encontrado. O que estou querendo exatamente as configuraes do hibernate no meu applicationContext mas s enconto artigos antigos. Tem algo mais recente que possa me indicar? Grato! Reply

54.

Gess View April 1, 2009 Anderson, Quanto as configuraes do hibernate no applicationContext, voc pode criar um datasource no context.xml e pegar a conexo via jndi no applicationContext Reply

55.

Anderson View April 1, 2009 Ol Gess, Algumas coisas ainda so meio obscuras para mim, mas nada que no possa ser resolvido. J estou quase conseguindo, de qualquer forma agradeo pela fora. Reply

56.

Gess View April 1, 2009 Ok Anderson Qualquer coisa s perguntar Reply

57.

Raphael View April 17, 2009 deu erro denovo. <! Alternativa caso queira configurar a conexo com o banco direto da aplicao > Reply

58.

Ginhu View April 22, 2009 Cara como fica isso no spring ? O genericDao tem que ter alguma configuracao especifica ? valeu Reply

59.

Anderson View April 22, 2009 O genericDao no, mas o hibernate sim. No momento ainda no consegui configurar no spring, mas estou utilizando uma classe utilitaria temporaria e espero jogar isso pro spring em breve. Reply

60.

IBM View February 18, 2010 Lembrando que esse exemplo foi criado a partir de: http://www.ibm.com/developerworks/java/library/j-genericdao.html sempre bom citar a fonte de onde se copia a informao. Reply Urubatanreplied: View February 21, 2010 Na verdade o cdigo semelhante mas o meu no foi baseado neste no, a idia eu tive partindo do exemplo postado no blog da caelum como cito no incio do post, s li este link que voc enviou depois de j estar utilizando o meu Dao genrico por algum tempo.

sobrecodigo.com/dao-generico-um-exemplo-a-pedidos/

16/19

18/09/13

DAO Generico um exemplo a pedidos Sobre Cdigo

Mas obrigado pelo link. Reply 61. ernani View February 23, 2010 cmo ficaria a integracao desse dao generico com o spring, no caso o spring +hibernate.. ? Reply 62. felipe.ar View April 15, 2010 Poxa, achei que no est to completo Foi o primeiro resultado da pesquisa do google Reply 63. Bruno Dilda View June 21, 2010 Estava procurando por um DAO genrico e at agora foi o melhor que eu achei. Porm estou com um problema de implementao. Quando tento rodar aparece o erro: java.lang.IllegalArgumentException: No SessionFactory specified at org.springframework.util.Assert.notNull(Assert.java:112) at org.springframework.orm.hibernate3.SessionFactoryUtils.doGetSession(SessionFactoryUtils.java:281) at org.springframework.orm.hibernate3.SessionFactoryUtils.getSession(SessionFactoryUtils.java:200) at org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSession(HibernateDaoSupport.java:165) at mignard.dao.impl.TOBaseHibernateDao.listAll(TOBaseHibernateDao.java:136) Saberia me dizer o erro ou o que tenho que fazer para funcionar? Reply 64. Bruno Dilda View June 22, 2010 Tirei a parte do spring e mudei o get session e esta funcionando =) Reply
Search Search

Powered by Webbynode

Recent Posts
Nomenclatura de entidades (classes, mtodos, variveis) no cdigo o que fazer, o que no fazer, regras a seguir Video e Exemplos da minha palestra do Just Jva 2013 Por que qualidade de cdigo importante, e por que a falta dele pode acabar com um projeto Just Java 2013 Vamos falar de Java EE e Rails trabalhando juntos! Curso online (Hangout) de BDD com cucumber melhorando a comunicao e automatizando os testes de software

Recent Comments
admin on Comentrio no cdigo para os fracos Joao on Em fim, um concorrente para o AdSense (, parece que perdi a vez) Maristane Thomazi on Braso da familia Jardim marista jardim on Braso da familia Jardim marista jardim on Braso da familia Jardim

Archives
June 2013
sobrecodigo.com/dao-generico-um-exemplo-a-pedidos/ 17/19

18/09/13

DAO Generico um exemplo a pedidos Sobre Cdigo

May 2013 April 2013 March 2013 January 2013 September 2012 August 2012 July 2012 May 2012 February 2012 January 2012 December 2011 November 2011 October 2011 September 2011 August 2011 May 2011 March 2011 February 2011 January 2011 November 2010 September 2010 August 2010 July 2010 June 2010 May 2010 April 2010 February 2010 January 2010 December 2009 November 2009 October 2009 September 2009 August 2009 July 2009 June 2009 May 2009 April 2009 March 2009 February 2009 January 2009 December 2008 November 2008 October 2008 September 2008 July 2008 June 2008 May 2008 April 2008 March 2008 February 2008 January 2008 December 2007 November 2007 October 2007 September 2007 August 2007 July 2007 June 2007 May 2007 April 2007 March 2007 February 2007 January 2007 December 2006 November 2006 October 2006 September 2006 August 2006 July 2006 June 2006 May 2006 April 2006 March 2006 February 2006 January 2006 December 2005 November 2005 October 2005
sobrecodigo.com/dao-generico-um-exemplo-a-pedidos/ 18/19

18/09/13

DAO Generico um exemplo a pedidos Sobre Cdigo

September 2005 August 2005 July 2005 June 2005 May 2005 April 2005 March 2005 November 2004 August 2004 July 2004 June 2004

Categories
Artigos Cursos Dia a Dia flex Histrico Java Mobile Node.JS rails Ruby Scala Trabalho Uncategorized

Meta
Log in Entries RSS Comments RSS WordPress.org

Copyright
2013 Sobre Cdigo. Return to top Powered by WordPress and the Graphene Theme.

sobrecodigo.com/dao-generico-um-exemplo-a-pedidos/

19/19

Você também pode gostar