romuloffPJ 3 de ago. de 2009
Solução para o problema acima:
http://boris.kirzner.info/blog/archives/2008/07/19/hibernate-annotations-the-many-to-many-association-with-composite-key/
Utiliza hibernate annotations , EmbeddedId , AssociationOverrides , Embeddable , AssociationOverride
Nao consegui implementar com Cascade pra relação.
Um usuário até colocou um exemplo com cascade nas respostas ( no link acima faça uma pesquisa pelo texto “the sample code DOES NOT provide this”)
Mas ocorre o erro abaixo.
Creio que é porque o hibernate não está conseguindo associar o produtoTO no *RelProdutoCusto que estaria sendo salvo pelo cascade; devido aos RelProdutoCusto’s que foram setados no produtoTO ainda não terem a co-relação com produtoTO ( [color=red]exatamente porque quero com Cascade e ele deveria fazer essa associação após obter o produtoId, correto?[/color] ). Até que no exemplo do usuário AnD , ele descreve assim: //no need to set product since we are creating a new product
*RelProdutoCusto = meu relativo de ProductItem do link
erro : < blockquote > ERROR [ AbstractHibernateDAO.create():108 ] - Exception on createnull
ERROR [ GerenciaProdutoAction.create():400 ] - exceção inesperada
javax . persistence . PersistenceException : Falha ao tentar inserir objeto
at br . com . ctbc . common . persistence . AbstractHibernateDAO . create ( AbstractHibernateDAO . java : 109 )
at br . com . ctbc . avalia . business . services . impl . ProdutoService . create ( ProdutoService . java : 196 )
at br . com . ctbc . avalia . controller . action . gerencia . GerenciaProdutoAction . create ( GerenciaProdutoAction . java : 375 )
at sun . reflect . NativeMethodAccessorImpl . invoke0 ( Native Method )
at sun . reflect . NativeMethodAccessorImpl . invoke ( NativeMethodAccessorImpl . java : 39 )
at sun . reflect . DelegatingMethodAccessorImpl . invoke ( DelegatingMethodAccessorImpl . java : 25 )
at java . lang . reflect . Method . invoke ( Method . java : 585 )
at org . apache . struts . actions . DispatchAction . dispatchMethod ( DispatchAction . java : 269 )
at br . com . ctbc . common . controller . action . BaseAction . dispatchMethod ( BaseAction . java : 69 )
at org . apache . struts . actions . DispatchAction . execute ( DispatchAction . java : 170 )
at org . apache . struts . action . RequestProcessor . processActionPerform ( RequestProcessor . java : 425 )
at org . apache . struts . action . RequestProcessor . process ( RequestProcessor . java : 228 )
at org . apache . struts . action . ActionServlet . process ( ActionServlet . java : 1913 )
at org . apache . struts . action . ActionServlet . doPost ( ActionServlet . java : 462 )
at javax . servlet . http . HttpServlet . service ( HttpServlet . java : 710 )
at javax . servlet . http . HttpServlet . service ( HttpServlet . java : 803 )
at org . apache . catalina . core . ApplicationFilterChain . internalDoFilter ( ApplicationFilterChain . java : 290 )
at org . apache . catalina . core . ApplicationFilterChain . doFilter ( ApplicationFilterChain . java : 206 )
at org . jboss . web . tomcat . filters . ReplyHeaderFilter . doFilter ( ReplyHeaderFilter . java : 96 )
at org . apache . catalina . core . ApplicationFilterChain . internalDoFilter ( ApplicationFilterChain . java : 235 )
at org . apache . catalina . core . ApplicationFilterChain . doFilter ( ApplicationFilterChain . java : 206 )
at org . apache . catalina . core . StandardWrapperValve . invoke ( StandardWrapperValve . java : 230 )
at org . apache . catalina . core . StandardContextValve . invoke ( StandardContextValve . java : 175 )
at org . jboss . web . tomcat . security . SecurityAssociationValve . invoke ( SecurityAssociationValve . java : 179 )
at org . jboss . web . tomcat . security . JaccContextValve . invoke ( JaccContextValve . java : 84 )
at org . apache . catalina . core . StandardHostValve . invoke ( StandardHostValve . java : 127 )
at org . apache . catalina . valves . ErrorReportValve . invoke ( ErrorReportValve . java : 102 )
at org . jboss . web . tomcat . service . jca . CachedConnectionValve . invoke ( CachedConnectionValve . java : 157 )
at org . apache . catalina . core . StandardEngineValve . invoke ( StandardEngineValve . java : 109 )
at org . apache . catalina . connector . CoyoteAdapter . service ( CoyoteAdapter . java : 262 )
at org . apache . coyote . http11 . Http11Processor . process ( Http11Processor . java : 844 )
at org . apache . coyote . http11 . Http11Protocol $ Http11ConnectionHandler . process ( Http11Protocol . java : 583 )
at org . apache . tomcat . util . net . JIoEndpoint $ Worker . run ( JIoEndpoint . java : 446 )
at java . lang . Thread . run ( Thread . java : 595 )
Caused by : java . lang . NullPointerException
at org . hibernate . type . AbstractType . getHashCode ( AbstractType . java : 112 )
at org . hibernate . type . AbstractType . getHashCode ( AbstractType . java : 120 )
at org . hibernate . type . EntityType . getHashCode ( EntityType . java : 279 )
at org . hibernate . type . ComponentType . getHashCode ( ComponentType . java : 189 )
at org . hibernate . engine . EntityKey . generateHashCode ( EntityKey . java : 104 )
at org . hibernate . engine . EntityKey . < init > ( EntityKey . java : 48 )
at org . hibernate . engine . StatefulPersistenceContext . getDatabaseSnapshot ( StatefulPersistenceContext . java : 240 )
at org . hibernate . engine . ForeignKeys . isTransient ( ForeignKeys . java : 189 )
at org . hibernate . event . def . AbstractSaveEventListener . getEntityState ( AbstractSaveEventListener . java : 512 )
at org . hibernate . event . def . DefaultSaveOrUpdateEventListener . performSaveOrUpdate ( DefaultSaveOrUpdateEventListener . java : 80 )
at org . hibernate . event . def . DefaultSaveOrUpdateEventListener . onSaveOrUpdate ( DefaultSaveOrUpdateEventListener . java : 70 )
at org . hibernate . impl . SessionImpl . fireSaveOrUpdate ( SessionImpl . java : 507 )
at org . hibernate . impl . SessionImpl . saveOrUpdate ( SessionImpl . java : 499 )
at org . hibernate . engine . CascadingAction $ 1. cascade ( CascadingAction . java : 218 )
at org . hibernate . engine . Cascade . cascadeToOne ( Cascade . java : 268 )
at org . hibernate . engine . Cascade . cascadeAssociation ( Cascade . java : 216 )
at org . hibernate . engine . Cascade . cascadeProperty ( Cascade . java : 169 )
at org . hibernate . engine . Cascade . cascadeCollectionElements ( Cascade . java : 296 )
at org . hibernate . engine . Cascade . cascadeCollection ( Cascade . java : 242 )
at org . hibernate . engine . Cascade . cascadeAssociation ( Cascade . java : 219 )
at org . hibernate . engine . Cascade . cascadeProperty ( Cascade . java : 169 )
at org . hibernate . engine . Cascade . cascade ( Cascade . java : 130 )
at org . hibernate . event . def . AbstractSaveEventListener . cascadeAfterSave ( AbstractSaveEventListener . java : 456 )
at org . hibernate . event . def . AbstractSaveEventListener . performSaveOrReplicate ( AbstractSaveEventListener . java : 334 )
at org . hibernate . event . def . AbstractSaveEventListener . performSave ( AbstractSaveEventListener . java : 181 )
at org . hibernate . event . def . AbstractSaveEventListener . saveWithGeneratedId ( AbstractSaveEventListener . java : 121 )
at org . hibernate . event . def . DefaultSaveOrUpdateEventListener . saveWithGeneratedOrRequestedId ( DefaultSaveOrUpdateEventListener . java : 187 )
at org . hibernate . event . def . DefaultSaveEventListener . saveWithGeneratedOrRequestedId ( DefaultSaveEventListener . java : 33 )
at org . hibernate . event . def . DefaultSaveOrUpdateEventListener . entityIsTransient ( DefaultSaveOrUpdateEventListener . java : 172 )
at org . hibernate . event . def . DefaultSaveEventListener . performSaveOrUpdate ( DefaultSaveEventListener . java : 27 )
at org . hibernate . event . def . DefaultSaveOrUpdateEventListener . onSaveOrUpdate ( DefaultSaveOrUpdateEventListener . java : 70 )
at org . hibernate . impl . SessionImpl . fireSave ( SessionImpl . java : 535 )
at org . hibernate . impl . SessionImpl . save ( SessionImpl . java : 523 )
at org . hibernate . impl . SessionImpl . save ( SessionImpl . java : 519 )
at br . com . ctbc . common . persistence . AbstractHibernateDAO . create ( AbstractHibernateDAO . java : 100 )
… 33 more
DEBUG [ GerenciaProdutoAction.create():403 ] - create method finished
INFO [ GeneralExceptionHandler.execute():32 ] - [ GE ] General Exception …
ERROR [ GeneralExceptionHandler.saveException():49 ] - User : null ;
ERROR [ GeneralExceptionHandler.saveException():50 ] - Path : < a href = "http://localhost:8080/ctbcsan/gerenciaProduto.do?acao=create;" > http : // localhost : 8080 / ctbcsan / gerenciaProduto . do ? acao = create ; </ a >
ERROR [ GeneralExceptionHandler.saveException():51 ] - Exception :
java . lang . Exception : Erro inesperado no método create de Produto !
at br . com . ctbc . avalia . controller . action . gerencia . GerenciaProdutoAction . create ( GerenciaProdutoAction . java : 401 )
at sun . reflect . NativeMethodAccessorImpl . invoke0 ( Native Method )
at sun . reflect . NativeMethodAccessorImpl . invoke ( NativeMethodAccessorImpl . java : 39 )
at sun . reflect . DelegatingMethodAccessorImpl . invoke ( DelegatingMethodAccessorImpl . java : 25 )
at java . lang . reflect . Method . invoke ( Method . java : 585 )
at org . apache . struts . actions . DispatchAction . dispatchMethod ( DispatchAction . java : 269 )
at br . com . ctbc . common . controller . action . BaseAction . dispatchMethod ( BaseAction . java : 69 )
at org . apache . struts . actions . DispatchAction . execute ( DispatchAction . java : 170 )
at org . apache . struts . action . RequestProcessor . processActionPerform ( RequestProcessor . java : 425 )
at org . apache . struts . action . RequestProcessor . process ( RequestProcessor . java : 228 )
at org . apache . struts . action . ActionServlet . process ( ActionServlet . java : 1913 )
at org . apache . struts . action . ActionServlet . doPost ( ActionServlet . java : 462 )
at javax . servlet . http . HttpServlet . service ( HttpServlet . java : 710 )
at javax . servlet . http . HttpServlet . service ( HttpServlet . java : 803 )
at org . apache . catalina . core . ApplicationFilterChain . internalDoFilter ( ApplicationFilterChain . java : 290 )
at org . apache . catalina . core . ApplicationFilterChain . doFilter ( ApplicationFilterChain . java : 206 )
at org . jboss . web . tomcat . filters . ReplyHeaderFilter . doFilter ( ReplyHeaderFilter . java : 96 )
at org . apache . catalina . core . ApplicationFilterChain . internalDoFilter ( ApplicationFilterChain . java : 235 )
at org . apache . catalina . core . ApplicationFilterChain . doFilter ( ApplicationFilterChain . java : 206 )
at org . apache . catalina . core . StandardWrapperValve . invoke ( StandardWrapperValve . java : 230 )
at org . apache . catalina . core . StandardContextValve . invoke ( StandardContextValve . java : 175 )
at org . jboss . web . tomcat . security . SecurityAssociationValve . invoke ( SecurityAssociationValve . java : 179 )
at org . jboss . web . tomcat . security . JaccContextValve . invoke ( JaccContextValve . java : 84 )
at org . apache . catalina . core . StandardHostValve . invoke ( StandardHostValve . java : 127 )
at org . apache . catalina . valves . ErrorReportValve . invoke ( ErrorReportValve . java : 102 )
at org . jboss . web . tomcat . service . jca . CachedConnectionValve . invoke ( CachedConnectionValve . java : 157 )
at org . apache . catalina . core . StandardEngineValve . invoke ( StandardEngineValve . java : 109 )
at org . apache . catalina . connector . CoyoteAdapter . service ( CoyoteAdapter . java : 262 )
at org . apache . coyote . http11 . Http11Processor . process ( Http11Processor . java : 844 )
at org . apache . coyote . http11 . Http11Protocol $ Http11ConnectionHandler . process ( Http11Protocol . java : 583 )
at org . apache . tomcat . util . net . JIoEndpoint $ Worker . run ( JIoEndpoint . java : 446 )
at java . lang . Thread . run ( Thread . java : 595 )
Caused by : javax . persistence . PersistenceException : Falha ao tentar inserir objeto
at br . com . ctbc . common . persistence . AbstractHibernateDAO . create ( AbstractHibernateDAO . java : 109 )
at br . com . ctbc . avalia . business . services . impl . ProdutoService . create ( ProdutoService . java : 196 )
at br . com . ctbc . avalia . controller . action . gerencia . GerenciaProdutoAction . create ( GerenciaProdutoAction . java : 375 )
… 31 more
Caused by : java . lang . NullPointerException
at org . hibernate . type . AbstractType . getHashCode ( AbstractType . java : 112 )
at org . hibernate . type . AbstractType . getHashCode ( AbstractType . java : 120 )
at org . hibernate . type . EntityType . getHashCode ( EntityType . java : 279 )
at org . hibernate . type . ComponentType . getHashCode ( ComponentType . java : 189 )
at org . hibernate . engine . EntityKey . generateHashCode ( EntityKey . java : 104 )
at org . hibernate . engine . EntityKey . < init > ( EntityKey . java : 48 )
at org . hibernate . engine . StatefulPersistenceContext . getDatabaseSnapshot ( StatefulPersistenceContext . java : 240 )
at org . hibernate . engine . ForeignKeys . isTransient ( ForeignKeys . java : 189 )
at org . hibernate . event . def . AbstractSaveEventListener . getEntityState ( AbstractSaveEventListener . java : 512 )
at org . hibernate . event . def . DefaultSaveOrUpdateEventListener . performSaveOrUpdate ( DefaultSaveOrUpdateEventListener . java : 80 )
at org . hibernate . event . def . DefaultSaveOrUpdateEventListener . onSaveOrUpdate ( DefaultSaveOrUpdateEventListener . java : 70 )
at org . hibernate . impl . SessionImpl . fireSaveOrUpdate ( SessionImpl . java : 507 )
at org . hibernate . impl . SessionImpl . saveOrUpdate ( SessionImpl . java : 499 )
at org . hibernate . engine . CascadingAction $ 1. cascade ( CascadingAction . java : 218 )
at org . hibernate . engine . Cascade . cascadeToOne ( Cascade . java : 268 )
at org . hibernate . engine . Cascade . cascadeAssociation ( Cascade . java : 216 )
at org . hibernate . engine . Cascade . cascadeProperty ( Cascade . java : 169 )
at org . hibernate . engine . Cascade . cascadeCollectionElements ( Cascade . java : 296 )
at org . hibernate . engine . Cascade . cascadeCollection ( Cascade . java : 242 )
at org . hibernate . engine . Cascade . cascadeAssociation ( Cascade . java : 219 )
at org . hibernate . engine . Cascade . cascadeProperty ( Cascade . java : 169 )
at org . hibernate . engine . Cascade . cascade ( Cascade . java : 130 )
at org . hibernate . event . def . AbstractSaveEventListener . cascadeAfterSave ( AbstractSaveEventListener . java : 456 )
at org . hibernate . event . def . AbstractSaveEventListener . performSaveOrReplicate ( AbstractSaveEventListener . java : 334 )
at org . hibernate . event . def . AbstractSaveEventListener . performSave ( AbstractSaveEventListener . java : 181 )
at org . hibernate . event . def . AbstractSaveEventListener . saveWithGeneratedId ( AbstractSaveEventListener . java : 121 )
at org . hibernate . event . def . DefaultSaveOrUpdateEventListener . saveWithGeneratedOrRequestedId ( DefaultSaveOrUpdateEventListener . java : 187 )
at org . hibernate . event . def . DefaultSaveEventListener . saveWithGeneratedOrRequestedId ( DefaultSaveEventListener . java : 33 )
at org . hibernate . event . def . DefaultSaveOrUpdateEventListener . entityIsTransient ( DefaultSaveOrUpdateEventListener . java : 172 )
at org . hibernate . event . def . DefaultSaveEventListener . performSaveOrUpdate ( DefaultSaveEventListener . java : 27 )
at org . hibernate . event . def . DefaultSaveOrUpdateEventListener . onSaveOrUpdate ( DefaultSaveOrUpdateEventListener . java : 70 )
at org . hibernate . impl . SessionImpl . fireSave ( SessionImpl . java : 535 )
at org . hibernate . impl . SessionImpl . save ( SessionImpl . java : 523 )
at org . hibernate . impl . SessionImpl . save ( SessionImpl . java : 519 )
at br . com . ctbc . common . persistence . AbstractHibernateDAO . create ( AbstractHibernateDAO . java : 100 )
… 33 more </ blockquote >