Pessoal,
a seguinte sequencia de logs no ECLIPSE me foi apresentada, resultando em um erro no final:
"
10:20:18,328 DEBUG DefaultSaveOrUpdateEventListener:142 - object already associated with session: [detam.vo.ProdutoVariante#1]
10:20:18,328 DEBUG CascadingAction:133 - cascading to saveOrUpdate: detam.vo.ProdutoVariante
10:20:18,328 DEBUG AbstractSaveEventListener:436 - persistent instance of: detam.vo.ProdutoVariante
10:20:18,328 DEBUG DefaultSaveOrUpdateEventListener:105 - ignoring persistent instance
10:20:18,328 DEBUG DefaultSaveOrUpdateEventListener:142 - object already associated with session: [detam.vo.ProdutoVariante#3]
10:20:18,328 DEBUG CascadingAction:133 - cascading to saveOrUpdate: detam.vo.ProdutoVariante
10:20:18,328 DEBUG AbstractSaveEventListener:446 - deleted instance of: detam.vo.ProdutoVariante
10:20:18,328 DEBUG DefaultSaveOrUpdateEventListener:161 - saving transient instance
10:20:18,328 DEBUG SessionImpl:1016 - flushing to force deletion of re-saved object: [detam.vo.ProdutoVariante#10]
10:20:18,343 WARN RequestProcessor:516 - Unhandled Exception thrown: class org.hibernate.ObjectDeletedException
10:20:18,343 ERROR [action]:253 - Servlet.service() for servlet action threw exception
org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [detam.vo.ProdutoVariante#10]
at org.hibernate.impl.SessionImpl.forceFlush(SessionImpl.java:1023)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:168)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:98)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:531)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:523)
at org.hibernate.engine.CascadingAction$1.cascade(CascadingAction.java:134)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:213)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:157)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108)
at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:290)
at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:185)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:160)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108)
at org.hibernate.engine.Cascade.cascade(Cascade.java:248)
at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:130)
at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:121)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1009)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:356)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at detam.dao.DAOPadrao.excluir(DAOPadrao.java:58)
at detam.action.AlteraProdutoVarianteAction.execute(AlteraProdutoVarianteAction.java:45)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
"
Tenho as classes de VO: “Produto” que tem uma lista de objetos de “ProdutoVariante”, q por sua vez tem uma lista de objetos de “ProdutoVarianteTamanho”.
Preciso excluir um objeto “ProdutoVariante” de um objeto “Produto” e ocorre esse erro. Jah pesquisei aqui msm sobre o erro. Achei algo semelhante, mas n funcionou.
Dois detalhes importantes:
- depois que dah esse erro, nenhuma outra execucao de metodo (insert, delete ou update) funciona. Jah os selects funcionam.
- quando eu deixava o cadastro de “ProdutoVariante” separado (nao na mesma pagina do “Produto”, ele funcionava sem erro. Quando eu pus na mesma pagina, comecou a dar esse erro.
Se alguem puder me dizer porque estah ocorrendo esse erro e tiver a solucao, ficarei mto grato.
Estou usando ANNOTATIONS.
Bom, aih vai o codigo fonte:
@Entity
@Table(name = "produto")
public class Produto implements VO {
private Integer id;
private Set<ProdutoVariante> variantes;
...
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="id_produto")
public Set<ProdutoVariante> getVariantes() {
return variantes;
}
public void setVariantes(Set<ProdutoVariante> variantes) {
this.variantes = variantes;
}
}
@Entity
@Table(name = "prod_variante")
public class ProdutoVariante implements VO{
private Integer id;
private Produto produto;
private Set<ProdutoVarianteTamanho> tamanhos;
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="id_prod_variante")
public Set<ProdutoVarianteTamanho> getProdutosVariantesTamanhos() {
return tamanhos;
}
public void setProdutosVariantesTamanhos(Set<ProdutoVarianteTamanho> t) {
this.tamanhos = t;
}
}
@Entity
@Table(name = "prod_var_tamanho")
public class ProdutoVarianteTamanho implements VO{
private Integer id;
private ProdutoVariante produtoVariante;
}
public interface VO {
}
Desde jah, fico grato.
E espero ter deixado claro.
[]s