| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/07/2009 13:48:32
|
romuloff
JavaGuru
![[Avatar]](/images/avatar/16d62f85a33e3e975a40c787b69d68dd.jpg)
Membro desde: 02/07/2007 14:56:24
Mensagens: 250
Localização: Uberlandia - MG
Offline
|
edit: este primeiro problema foi resolvido na resposta abaixo, mas há outro problema muito maior!
Pessoal, como faz pra ensinar o hibernate a não utilizar identificadores maiores que 30 caracteres ?
Olhem o log do sql que ele gerou pra um consulta na minha aplicação:
INFO [LoggerStream.write():152] - Hibernate:
select
relproduto0_.SAN_PRODUTO_PRODUTO_ID as SAN5_1_,
relproduto0_.relProdutoCustoCollection_CUSTO_ID as relProdu6_1_,
relproduto0_.relProdutoCustoCollection_PRODUTO_ID as relProdu7_1_,
relproduto1_.CUSTO_ID as CUSTO4_19_0_,
relproduto1_.PRODUTO_ID as PRODUTO3_19_0_,
relproduto1_.QUANTIDADE as QUANTIDADE19_0_,
relproduto1_.VISIVEL_BOOL as VISIVEL2_19_0_
from
SAN_REL_PRODUTO_CUSTO relproduto0_,
SAN_REL_PRODUTO_CUSTO relproduto1_
where
relproduto0_.relProdutoCustoCollection_CUSTO_ID=relproduto1_.CUSTO_ID(+)
and relproduto0_.relProdutoCustoCollection_PRODUTO_ID=relproduto1_.PRODUTO_ID(+)
and relproduto0_.SAN_PRODUTO_PRODUTO_ID=?
Resultado:
java.sql.SQLException: ORA-00972: identificador muito longo
This message was edited 5 times. Last update was at 03/08/2009 13:16:38
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/07/2009 15:23:16
|
romuloff
JavaGuru
![[Avatar]](/images/avatar/16d62f85a33e3e975a40c787b69d68dd.jpg)
Membro desde: 02/07/2007 14:56:24
Mensagens: 250
Localização: Uberlandia - MG
Offline
|
resolví o problema aí de cima. Dei uma força pro hibernate e renomeei o atributo relProdutoCustoCollection pra relProdCustoColl
Mas está ocorrendo outro problema agora:
INFO [LoggerStream.write():152] - Hibernate:
/* load collection br.com.ctbc.avalia.model.data.ProdutoTO.relProdCustoColl */ select
relprodcus0_.PRODUTO_ID as PRODUTO3_1_,
relprodcus0_.relProdCustoColl_CUSTO_ID as relProdC5_1_,
relprodcus0_.relProdCustoColl_PRODUTO_ID as relProdC6_1_,
relproduto1_.CUSTO_ID as CUSTO4_19_0_,
relproduto1_.PRODUTO_ID as PRODUTO3_19_0_,
relproduto1_.QUANTIDADE as QUANTIDADE19_0_,
relproduto1_.VISIVEL_BOOL as VISIVEL2_19_0_
from
SAN_REL_PRODUTO_CUSTO relprodcus0_,
SAN_REL_PRODUTO_CUSTO relproduto1_
where
relprodcus0_.relProdCustoColl_CUSTO_ID=relproduto1_.CUSTO_ID(+)
and relprodcus0_.relProdCustoColl_PRODUTO_ID=relproduto1_.PRODUTO_ID(+)
and relprodcus0_.PRODUTO_ID=?
ERROR [JDBCExceptionReporter.logExceptions():78] - ORA-00904: "RELPRODCUS0_"."RELPRODCUSTOCOLL_PRODUTO_ID": identificador inválido
ERROR [ApplicationDispatcher.invoke():686] - Servlet.service() for servlet jsp threw exception
java.sql.SQLException: ORA-00904: "RELPRODCUS0_"."RELPRODCUSTOCOLL_PRODUTO_ID": identificador inválido
De onde o hibernate está tirando esse RELPRODCUSTOCOLL_PRODUTO_ID ?
Muito estranho. o RELPRODCUSTOCOLL_ que está a mais é o atributo no TO com letras maiusculas. se remover ele fica certo :
"RELPRODCUS0_"."RELPRODCUSTOCOLL_PRODUTO_ID": identificador inválido
"RELPRODCUS0_"."PRODUTO_ID"
Meus mapeamentos:
ProdutoTO.java:
RelProdutoCusto.JAVA
RelProdutoCustoCompositePK.java
This message was edited 4 times. Last update was at 03/08/2009 13:34:54
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/08/2009 08:39:59
|
romuloff
JavaGuru
![[Avatar]](/images/avatar/16d62f85a33e3e975a40c787b69d68dd.jpg)
Membro desde: 02/07/2007 14:56:24
Mensagens: 250
Localização: Uberlandia - MG
Offline
|
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/
keywords: hibernate annotations , EmbeddedId , AssociationOverrides , Embeddable , AssociationOverride
This message was edited 6 times. Last update was at 03/08/2009 14:49:44
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/08/2009 10:25:28
|
romuloff
JavaGuru
![[Avatar]](/images/avatar/16d62f85a33e3e975a40c787b69d68dd.jpg)
Membro desde: 02/07/2007 14:56:24
Mensagens: 250
Localização: Uberlandia - MG
Offline
|
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 ( exatamente porque quero com Cascade e ele deveria fazer essa associação após obter o produtoId, correto? ). 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:
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)
... (irrelevante omitido)
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
This message was edited 6 times. Last update was at 03/08/2009 16:50:14
|
|
|
 |
|
|