vRaptor - erro 500, objeto diferente com mesmo identificador [RESOLVIDO]

7 respostas
tefo

Eai pessoal,

estou tendo problemas ao tentar atualizar um objeto..

este eh o metodo que eu executo e eh onde da o erro:
@Restrito
	@Put @Path("/{pessoa.usuario.login}/alterarPessoa")
	public void alterar(Pessoa pessoa, String cadastroAtivo, String dataCadastro, String qtdAcessos, String idCripto) {

		// cache do ID criptografado para o metodo validarPessoa
		this.idCripto = idCripto;
		
		Long id = null;
		try{
			id = Long.parseLong(DecryptData.decryptData(idCripto, CreateAndSaveAESKey.AES_SECRET_KEY_FOR_ID));
		}catch (NoSuchAlgorithmException noSuchAlgo) {
			System.out.println(" Nao existe tal algoritmo: " + noSuchAlgo.getMessage());
		}catch (NoSuchPaddingException noSuchPad) {
			System.out.println(" Nao foi preenchido: " + noSuchPad.getMessage());
		}catch (InvalidKeyException invalidKey) {
			System.out.println(" Codigo invalido: " + invalidKey.getMessage());
		}catch (BadPaddingException badPadding) {
			System.out.println(" Preenchido errado: " + badPadding.getMessage());
		}catch (IllegalBlockSizeException illegalBlockSize) {
			System.out.println(" Tamanho do bloco ilegal: " + illegalBlockSize.getMessage());
		}catch (InvalidAlgorithmParameterException invalidParam) {
			System.out.println(" Parametro invalido: " + invalidParam.getMessage());
		}catch (Exception e) {
			System.out.println(" Erro: " + e.getMessage());
		}
		
		Cidade cidade = cidDao.consultar(pessoa.getCidade().getId());
		pessoa.setCidade(cidade);
		
		Pessoa recuperada = pesDao.consultar(id);
		pessoa.setId(id);
		pessoa.setCadastroAtivo(recuperada.getCadastroAtivo());
		pessoa.setDataCadastro(recuperada.getDataCadastro());
		pessoa.setQtdAcessos(recuperada.getQtdAcessos());
		pessoa.setUsuario(recuperada.getUsuario());
		
		validarPessoa(pessoa);
		pesDao.alterar(pessoa); 
		result.redirectTo(this).listar();
	}
este eh o erro que aparece no console do eclipse:
06/08/2012 23:01:56 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet default threw exception
br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: net.vidageek.mirror.exception.ReflectionProviderException: Could not invoke method update
	at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:96)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:87)
	at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	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:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:680)
Caused by: net.vidageek.mirror.exception.ReflectionProviderException: Could not invoke method update
	at net.vidageek.mirror.provider.java.PureJavaMethodReflectionProvider.invoke(PureJavaMethodReflectionProvider.java:45)
	at net.vidageek.mirror.invoke.MethodHandlerByMethod.withArgs(MethodHandlerByMethod.java:54)
	at br.com.website.infra.CriadorDeSession$1.intercept(CriadorDeSession.java:37)
	at br.com.website.infra.CriadorDeSession$1.intercept(CriadorDeSession.java:1)
	at br.com.caelum.vraptor.proxy.CglibProxifier$2.intercept(CglibProxifier.java:95)
	at org.hibernate.Session$$EnhancerByCGLIB$$58a1cefe.update(<generated>)
	at br.com.website.dao.PessoaDaoImpl.alterar(PessoaDaoImpl.java:39)
	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:597)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
	at $Proxy51.alterar(Unknown Source)
	at br.com.website.controller.PessoaController.alterar(PessoaController.java:135)
	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:597)
	at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)
	... 43 more
Caused by: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [br.com.website.bean.Pessoa#3]
	at org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:638)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:305)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:246)
	at org.hibernate.event.def.DefaultUpdateEventListener.performSaveOrUpdate(DefaultUpdateEventListener.java:57)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
	at org.hibernate.impl.SessionImpl.fireUpdate(SessionImpl.java:742)
	at org.hibernate.impl.SessionImpl.update(SessionImpl.java:730)
	at org.hibernate.impl.SessionImpl.update(SessionImpl.java:722)
	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:597)
	at net.vidageek.mirror.provider.java.PureJavaMethodReflectionProvider.invoke(PureJavaMethodReflectionProvider.java:38)
	... 66 more

e eu nao estou sabendo o que esta acontecendo..
soh sei que antes de acontecer esse erro eu executo o login e a chamada do metodo que carrega o objeto pessoa e chama a tela de ediçao, e ao submeter o form de ediçao eh chamado esse metodo que mostrei acima..

se alguem souber me ajudar, eu agradeço desde ja..

7 Respostas

Lucas_Cavalcanti

no alterar troque o método update pelo merge

tefo

eai Lucas..

fiz o que vc disse e apareceu o seguinte erro:
07/08/2012 13:23:30 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet default threw exception
br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: net.vidageek.mirror.exception.ReflectionProviderException: Could not invoke method merge
	at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:96)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:87)
	at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	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:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:680)
Caused by: net.vidageek.mirror.exception.ReflectionProviderException: Could not invoke method merge
	at net.vidageek.mirror.provider.java.PureJavaMethodReflectionProvider.invoke(PureJavaMethodReflectionProvider.java:45)
	at net.vidageek.mirror.invoke.MethodHandlerByMethod.withArgs(MethodHandlerByMethod.java:54)
	at br.com.website.infra.CriadorDeSession$1.intercept(CriadorDeSession.java:37)
	at br.com.website.infra.CriadorDeSession$1.intercept(CriadorDeSession.java:1)
	at br.com.caelum.vraptor.proxy.CglibProxifier$2.intercept(CglibProxifier.java:95)
	at org.hibernate.Session$$EnhancerByCGLIB$$998c5f34.merge(<generated>)
	at br.com.website.dao.PessoaDaoImpl.alterar(PessoaDaoImpl.java:39)
	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:597)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
	at $Proxy53.alterar(Unknown Source)
	at br.com.website.controller.PessoaController.alterar(PessoaController.java:135)
	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:597)
	at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)
	... 43 more
Caused by: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [br.com.website.bean.Pessoa#3]
	at org.hibernate.event.def.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:485)
	at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:255)
	at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:84)
	at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:867)
	at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:851)
	at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:855)
	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:597)
	at net.vidageek.mirror.provider.java.PureJavaMethodReflectionProvider.invoke(PureJavaMethodReflectionProvider.java:38)
	... 66 more
pelo que entendi eu posso ter mapeado errado.. vou colocar minha classe Pessoa e Usuario para vc entender como foram mapeados:
@Entity
public class Pessoa implements Serializable {

	@Id
    @SequenceGenerator(name="PessoaId",allocationSize=1, sequenceName="PessoaId")
    @GeneratedValue(generator="PessoaId", strategy=GenerationType.SEQUENCE)
	private Long id; 
	
	@Version
	private Long versao;
	
	@NotEmpty(message="O nome deve ser informado!") 
	@Length(min=3, message="O nome deve conter mais de 3 caracteres!")
	private String nome; 
	
	@NotEmpty(message="O e-mail deve ser informado!")
	@Length(min=3, max=80, message="O e-mail deve conter entre 3 e 80 caracteres!")
	@Email(message="Informe um e-mail valido!")
	private String email;
	
	@Length(min=9, max=9, message="O CEP deve conter 9 caracteres!")
	@NotEmpty(message="O CEP deve ser informado!") 
	private String cep;
	
	@Length(min=6, max=8, message="O tipo de pessoa deve ser ou Fisica ou Juridica!")
	@NotEmpty(message="O tipo da pessoa deve ser informado!") 
	private String tipoPessoa;
	
	private Long qtdAcessos;
	
	/**
	 * A data de cadastro deve ser inserida automaticamente pelo sistema.
	 */
	@NotNull(message="A data de cadastro deve ser informada!")
	@Temporal(value=TemporalType.DATE)
	private Date dataCadastro;
	
	private Boolean cadastroAtivo;
	
    @OneToOne(mappedBy="pessoa")
    private Usuario usuario;

	/**
     * Cidade da pessoa (agrega&ccedil;&atilde;o). <br/>
     * Muitas pessoas para uma cidade.
     */
    @ManyToOne
    @NotNull(message="A cidade deve ser informado!")
    private Cidade cidade;
@Entity
public class Usuario implements Serializable {

	@Id
    @SequenceGenerator(name="UsuarioId",allocationSize=1, sequenceName="UsuarioId")
    @GeneratedValue(generator="UsuarioId", strategy=GenerationType.SEQUENCE)
    private Long id;
	
	@Version
	private Long versao;
    
	@NotEmpty(message="O login deve ser informado!")
    private String login;
	
	@NotEmpty(message="O password deve ser informado!")
    private String password;
    
    /**
     * Pessoa do usuario (agrega&ccedil;&atilde;o). <br/>
     * Uma pessoa para um usuario.
     */
    @OneToOne(cascade=CascadeType.ALL, optional=false, fetch=FetchType.EAGER, orphanRemoval=true)
    @PrimaryKeyJoinColumn
    @NotNull(message="A pessoa deve ser informada!")
    private Pessoa pessoa;

bem, eu tenho uma ligaçao um para um entre usuario e pessoa.. quando eu crio um objeto pessoa ela eh adicionada ao atributo pessoa no objeto usuario e o usuario eh persistido..

Para eu atualizar os atributos de pessoa devo fazer da mesma forma como faço para cria-los? ou seja, adicionar a pessoa alterada ao usuario e atualizar o usuario?

Lucas_Cavalcanti

esse erro é por causa do lock otimista… vc tem um atributo com @Version… na hora de fazer qqer coisa com os objetos com isso vc tem que estar com a mesma versão que tá no banco…

ou seja, não basta só setar o id do objeto, vc tem que setar a versao também…

geralmente vc consegue fazer isso buscando cada relacionamento no banco (ou só os caras com @Version), com o session.load

tefo

entao vc quer dizer que eu tenho que recuperar o atributo versao, setar no objeto pessoa a ser atualizado e persisti-lo com a mesma versao que esta no banco?

tefo

era isso mesmo!

adicionei a seguinte linha no meu metodo antes de persistir e funcionou:pessoa.setVersao(recuperada.getVersao());
obrigado pela força ai Lucas!!

Lucas_Cavalcanti

se pessoa é o objeto que vc tá salvando, não faça isso!!!

senão vc tá zuando todo o esquema de lock…

vc precisa no formulário colocar um input hidden com a versão:

<input type="hidden" name="pessoa.versao" value="${pessoa.versao}" />
tefo

desconfiei desde o principio… :lol:

Criado 6 de agosto de 2012
Ultima resposta 7 de ago. de 2012
Respostas 7
Participantes 2