Ajuda com VRaptor FJ-28, Exception NonUniqueObject [RESOLVIDO]

2 respostas
ferracin

Olá, estou fazendo os exercicios da Apostila Caelum FJ-28 e me deparei com a seguinte exception que cheguei no capitulo de 10 - REST.
Tudo está funcionando normalmente só quando vou dar um update em produto que acontece isso.
Detalhe: estava tudo fucionando antes desta parte.

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [br.com.caelum.modelo.Produto#2]
	br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:86)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:69)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:90)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:44)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
	br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
root cause

org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [br.com.caelum.modelo.Produto#2]
	org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:637)
	org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:305)
	org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:246)
	org.hibernate.event.def.DefaultUpdateEventListener.performSaveOrUpdate(DefaultUpdateEventListener.java:57)
	org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
	org.hibernate.impl.SessionImpl.fireUpdate(SessionImpl.java:734)
	org.hibernate.impl.SessionImpl.update(SessionImpl.java:722)
	org.hibernate.impl.SessionImpl.update(SessionImpl.java:714)
	br.com.caelum.dao.ProdutoDao.altera(ProdutoDao.java:29)
	br.com.caelum.controller.ProdutosController.altera(ProdutosController.java:60)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:597)
	br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:57)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:69)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:90)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:44)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
	br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.5 logs.

Entendo que o problema está no objeto produto que já está no cache do hibernate está conflitando com o que estou tentando dar o update, mas como solucionar isso, onde será que fiz coisa errada, tto quebrando a cabeça e admito que meus conhecimento ainda são muito vagos, por isso preciso de ajuda.

Outra coisa reparei que a minha SESSION está iniciando quando carrego o tomcat, ela não teria que iniciar somente quando fosse requisitada pela aplicação?

22/12/2010 08:38:45 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Default entity-mode: pojo
22/12/2010 08:38:45 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Named query checking : enabled
22/12/2010 08:38:45 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Check Nullability in Core (should be disabled when Bean Validation is on): enabled
22/12/2010 08:38:46 org.hibernate.impl.SessionFactoryImpl <init>
INFO: building session factory
22/12/2010 08:38:46 org.hibernate.impl.SessionFactoryObjectFactory addInstance
INFO: Not binding factory to JNDI, no JNDI name configured

Abrindo factory
Abrindo session

08:38:46,449 DEBUG [VRaptorApplicationContext] Unable to locate LifecycleProcessor with name 'lifecycleProcessor': using default [org.springframework.context.support.DefaultLifecycleProcessor@be8c3e]
22/12/2010 08:38:46 br.com.caelum.vraptor.core.DefaultConverters <init>
INFO: Registering bundled converters
22/12/2010 08:38:46 br.com.caelum.vraptor.http.route.DefaultRouteBuilder is
INFO: /produtos                                         [GET] -> ProdutosController.lista()
22/12/2010 08:38:46 br.com.caelum.vraptor.http.route.DefaultRouteBuilder is
INFO: /produtos/novo                                    [GET] -> ProdutosController.formulario()
22/12/2010 08:38:46 br.com.caelum.vraptor.http.route.DefaultRouteBuilder is
INFO: /produtos                                         [POST] -> ProdutosController.adiciona(Produto)
22/12/2010 08:38:46 br.com.caelum.vraptor.http.route.DefaultRouteBuilder is
INFO: /produtos/{id}                                    [GET] -> ProdutosController.edita(Long)
22/12/2010 08:38:46 br.com.caelum.vraptor.http.route.DefaultRouteBuilder is
INFO: /produtos/{produto.id}                            [PUT] -> ProdutosController.altera(Produto)
22/12/2010 08:38:46 br.com.caelum.vraptor.http.route.DefaultRouteBuilder is
INFO: /produtos/{id}                                    [DELETE] -> ProdutosController.remove(Long)
22/12/2010 08:38:46 br.com.caelum.vraptor.http.route.DefaultRouteBuilder is
INFO: /mundo/boasVindas                                 [ALL] -> Mundo.boasVindas()
22/12/2010 08:38:46 br.com.caelum.vraptor.http.route.DefaultRouteBuilder is
INFO: /mundo/paises                                     [ALL] -> Mundo.paises()
22/12/2010 08:38:46 br.com.caelum.vraptor.VRaptor init
INFO: VRaptor 3.2.0-SNAPSHOT successfuly initialized
22/12/2010 08:38:46 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
22/12/2010 08:38:46 org.apache.coyote.ajp.AjpProtocol start
INFO: Starting Coyote AJP/1.3 on ajp-8009
22/12/2010 08:38:46 org.apache.catalina.startup.Catalina start
INFO: Server startup in 4659 ms

2 Respostas

Lucas_Cavalcanti

sua classe que cria a Session está anotada com o que? Se tiver o @ApplicationScoped, tire. só a que cria a SessionFactory deveria estar com @ApplicationScoped

ferracin

Resolvido Lucas valew mesmo muito obrigado, erro infantil meu, mas no começo é assim mesmo, depois piora. :roll:

Criado 22 de dezembro de 2010
Ultima resposta 22 de dez. de 2010
Respostas 2
Participantes 2