a different object with the same identifier value was already associated with the session:

来源:互联网 发布:鹏毓网络 编辑:程序博客网 时间:2024/06/16 18:27
  • 问题:这个著名的托管态update更新异常

Struts has detected an unhandled exception:

Messages:
  • a different object with the same identifier value was already associated with the session: [com.hospital.zxy.bean.Doctor#1]
  • File:org/hibernate/engine/internal/StatefulPersistenceContext.javaLine number:687

    Stacktraces

    org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.hospital.zxy.bean.Doctor#1]
        org.hibernate.engine.internal.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:687)    org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:293)    org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:239)    org.hibernate.event.internal.DefaultUpdateEventListener.performSaveOrUpdate(DefaultUpdateEventListener.java:55)    org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)    org.hibernate.internal.SessionImpl.fireUpdate(SessionImpl.java:779)    org.hibernate.internal.SessionImpl.update(SessionImpl.java:771)    org.hibernate.internal.SessionImpl.update(SessionImpl.java:767)    com.hospital.zxy.base.BaseDaoImpl.update(BaseDaoImpl.java:32)    com.hospital.zxy.service.DoctorService.update(DoctorService.java:70)    com.hospital.zxy.service.DoctorService$$FastClassByCGLIB$$ed668523.invoke()    net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)    org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:689)    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)    org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)    com.hospital.zxy.service.DoctorService$$EnhancerByCGLIB$$9762f19b.update()    com.hospital.zxy.action.DoctorAction.updateDoctor(DoctorAction.java:100)    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)    java.lang.reflect.Method.invoke(Method.java:606)    com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)    com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)    com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)    com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)    org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)    com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)    com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)    org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)    org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:314)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)    com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)    com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)    org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)    com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)    com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)    com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)    org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)    com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)    com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)    java.lang.Thread.run(Thread.java:744)    

    You are seeing this page because development mode is enabled. Development mode, or devMode, enables extra debugging behaviors and reports to assist developers. To disable this mode, set:

      struts.devMode=false
    in your WEB-INF/classes/struts.properties file.
    这个错困扰了我几天,网上的方法也用过,还是不好用,最后问了老师才解决了。
    解决方法有两个:
    1. 把你要修改的对象先查出来,再把修改过后的值设到查出来的对象中,然后再update,完成。
    Doctor doctor=dao.getById(model.getId());
    doctor.setAddress(model.getAddress());
    doctor.setAge(model.getAge());
    doctor.setDepartment(department);
    doctor.setTitle(title);
    doctor.setPicture(model.getPicture());
    doctor.setName(model.getName());
    doctor.setGander(model.getGander());
    doctor.setPhone(model.getPhone());*/
    dao.update(doctor);
    2.直接使用merge()方法。getSession().merge(entity);
    0 0
    原创粉丝点击