2014-02-07 4 views
9

ich diese Störung erhalte, wenn ich Werte in der Datenbank Mich versuche aus meiner Feder MVC-Anwendung zu aktualisieren:org.hibernate.StaleStateException: Die Stapelaktualisierung hat eine unerwartete Zeilenanzahl von update [0] zurückgegeben. tatsächliche Anzahl der Zeilen: 0; erwartet

org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 
     at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:61) 
     at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:46) 
     at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:68) 
     at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48) 
     at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242) 
     at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235) 
     at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140) 
     at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) 
     at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) 
     at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) 
     at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338) 
     at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) 
     at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:656) 
     at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754) 
     at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723) 
     at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393) 
     at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120) 
     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
     at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 
     at com.sun.proxy.$Proxy21.updatePerson(Unknown Source) 
     at se.lowdin.civilforsvaret.webapp.controller.EditPersonContoller.save(EditPersonContoller.java:57) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:601) 
     at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426) 
     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414) 
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
     at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166) 
     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:722) 
    DEBUG: org.hibernate.jdbc.AbstractBatcher - about to close PreparedStatement (open PreparedStatements: 1, globally: 1) 
    TRACE: org.hibernate.jdbc.AbstractBatcher - closing statement 
    ERROR: org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session 
    org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 
     at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:61) 
     at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:46) 
     at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:68) 
     at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48) 
     at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242) 
     at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235) 
     at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140) 
     at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) 
     at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) 
     at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) 
     at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338) 
     at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) 
     at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:656) 
     at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754) 
     at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723) 
     at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393) 
     at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120) 
     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
     at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 
     at com.sun.proxy.$Proxy21.updatePerson(Unknown Source) 
     at se.lowdin.civilforsvaret.webapp.controller.EditPersonContoller.save(EditPersonContoller.java:57) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:601) 
     at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426) 
     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414) 
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
     at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166) 
     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:722) 
    TRACE: org.hibernate.jdbc.ConnectionManager - registering flush end 
    DEBUG: org.hibernate.transaction.JDBCTransaction - rollback 
    DEBUG: org.hibernate.transaction.JDBCTransaction - re-enabling autocommit 
    DEBUG: org.hibernate.transaction.JDBCTransaction - rolled back JDBC Connection 
    TRACE: org.hibernate.jdbc.JDBCContext - after transaction completion 
    DEBUG: org.hibernate.jdbc.ConnectionManager - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources! 
    TRACE: org.hibernate.impl.SessionImpl - after transaction completion 
    TRACE: org.hibernate.impl.SessionImpl - closing session 
    TRACE: org.hibernate.jdbc.ConnectionManager - performing cleanup 
    DEBUG: org.hibernate.jdbc.ConnectionManager - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)] 
    TRACE: org.hibernate.jdbc.JDBCContext - after transaction completion 
    DEBUG: org.hibernate.jdbc.ConnectionManager - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources! 
    TRACE: org.hibernate.impl.SessionImpl - after transaction completion 
    feb 07, 2014 11:04:32 FM org.apache.catalina.core.StandardWrapperValve invoke 
    SEVERE: Servlet.service() for servlet [spring] in context with path [/CRUDWebAppMavenized] threw exception [Request processing failed; nested exception is org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; nested exception is org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1] with root cause 
    org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 
     at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:61) 
     at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:46) 
     at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:68) 
     at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48) 
     at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242) 
     at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235) 
     at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140) 
     at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) 
     at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) 
     at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) 
     at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338) 
     at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) 
     at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:656) 
     at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754) 
     at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723) 
     at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393) 
     at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120) 
     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
     at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 
     at com.sun.proxy.$Proxy21.updatePerson(Unknown Source) 
     at se.lowdin.civilforsvaret.webapp.controller.EditPersonContoller.save(EditPersonContoller.java:57) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:601) 
     at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426) 
     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414) 
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
     at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166) 
     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:722) 

Also mein eigentlicher Fehler scheint etwas mit dem ID's in der Datenbank zu sein und was sein aktualisiert. In meinem GET-Methode in diesem Fall bin ich die aktuelle ID bekommen, die 10.

@Autowired 
PersonService service; 


@RequestMapping(method = RequestMethod.GET) 
public ModelAndView index(@PathVariable int id) { 

    EditPersonBean bean = new EditPersonBean(); 

    if (id > 0) { 
     Person person = service.getPerson(id); 
     bean.copyValuesToBean(person); 
    } 

    ModelAndView mav = new ModelAndView("editPerson"); 
    mav.addObject("editPersonBean", bean); 
    return mav; 

} 

Aber in meinem post-Methode ist diese ID, die 10 war, ist plötzlich 0, was ich glauben könnte die Ursache für diesen Fehler sein?

@RequestMapping(value = "/edit", method = RequestMethod.POST) 
     public String save (EditPersonBean bean, Person person, @RequestParam(value = "file", required = false) MultipartFile file) { 


      System.out.println("incoming id : " + bean.getId()); 

      try { 

       Blob blob = Hibernate.createBlob(file.getInputStream()); 
       bean.copyBeanValuesToPerson(person,blob); 
       service.updatePerson(person); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 


      return "redirect:/person.html"; 
     } 

Was könnte dann die Ursache dafür sein oder ist der Fehler etwas anderes?

public class EditPersonBean { 

     private int id; 
     private String firstName; 
     private String lastName; 
     private String email; 
     private String phoneNumber; 
     private String otherInfo; 
     private Blob image; 
     private String userName; 
     private String password; 

     public void copyValuesToBean(Person person){ 

      setId((int) person.getId()); 
      setFirstName(person.getFirstName()); 
      setLastName(person.getLastName()); 
      setEmail(person.getEmail()); 
      setPhoneNumber(person.getPhoneNumber()); 
      setOtherInfo(person.getOtherInfo()); 
      setImage(person.getImage()); 
      setUserName(person.getUserName()); 
      setPassword(person.getPassword());; 

     } 

@Entity 
public class Person { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "ID") 
    private int id; 
    @Column(name = "FIRSTNAME") 
    private String firstName; 
    @Column(name = "SECONDNAME") 
    private String lastName; 
    @Column(name = "EMAIL") 
    private String email; 
    @Column(name = "MobilePHONENUM") 
    private String phoneNumber; 
    @Column(name = "OTHER") 
    private String otherInfo; 
    @Column(name = "image") 
    @Lob 
    private Blob image; 
    @NotEmpty 
    @Size(min = 1, max = 50) 
    @Column(name = "username") 
    private String userName; 
    @NotEmpty 
    @Size(min = 1, max = 20) 
    @Column(name = "password") 
    private String password; 

    public Person() { 

    } 

    public Person(int id, String firstName, String lastName, String email, 
      String phoneNumber, String otherInfo, Blob image, String userName, String password) { 

     setId(id); 
     setFirstName(firstName); 
     setLastName(lastName); 
     setEmail(email); 
     setPhoneNumber(phoneNumber); 
     setOtherInfo(otherInfo); 
     setImage(image); 
     setUserName(password); 
     setPassword(userName); 

    } //Getters and setters... 

JPA Klasse:

@Override 
    public Person getPerson(int personId) { 
     return (Person)session.getCurrentSession().get(Person.class, personId); 
    } 

Antwort

10

Der einzige Weg, um genau wissen, was geschieht Konfiguration einzuschalten Hibernate Anweisung Protokollierung in Ihrem hibernate.cfg.xml. Das liegt daran, dass keine der Zeilennummern in der Stack-Trace mit dem Teil des Codes übereinstimmt, der den eigentlichen Hibernate-Vorgang ausgeführt hat. Stattdessen werden die Operationen gestapelt und dann auf einmal ausgeführt, nachdem die Transaktion abgeschlossen wurde (oder nachdem eine bestimmte Anzahl von Operationen in Stapel zusammengefasst wurde).

Hibernate Anweisung Protokollierung, sagte

<property name="show_sql">true</property> 
    <property name="format_sql">true</property> 
    <property name="use_sql_comments">true</property> 

das zu ermöglichen, habe ich das letzte Mal in dieser Ausgabe lief, war es ein Fall eines Datensatzes durch die allgemeine HQL-Update in einem anderen Thread/Transaktion, die dann gelöscht Aktueller Thread/Transaktion, die versucht, den exakt gleichen Datensatz nach ID zu löschen. Leider, da die Transaktion stapelweise ist, sehen Sie sie nicht an dem Punkt, an dem Sie die Löschung vorgenommen haben, sondern irgendwann später in der Programmausführung. Daher muss die Protokollierung der Anweisung aktiviert werden, um festzustellen, welche tatsächliche Hibernate-Operation die Ausnahme ausgelöst hat.

+0

mit diesem habe ich herausgefunden, dass ich den 'EntityManager' falsch verwendet habe und ein' insert' anstatt eines 'update' ausgegeben wurde. Danke –

11

Dieser Fehler wird normalerweise verursacht, wenn der Ruhezustand nicht alle Zeilen finden kann, die aktualisiert werden müssen. Das bedeutet, wenn Sie versuchen, einige Objekte zu aktualisieren, die aus der DB gezogen wurden, existieren sie nicht mehr (oder existierten nie an erster Stelle).

Möglicherweise liegt es daran, dass ein anderer Thread sie löscht oder dass der Isolationsmodus der DB auf read_uncommited gesetzt ist und Zeilen, die von einer anderen Transaktion erstellt wurden, nicht gespeichert werden konnten (aufgrund eines Transaktionsfehlers) und nicht mehr vorhanden sind.

1

Geben Sie save anstelle von saveOrUpdate in Ihre Hibernate-Abfrage ein. Dies liegt an früheren Protokollen, die Ihre Klasse eine andere ID generiert, die zuvor in Ihrer Tabelle gespeichert wurde. So versucht Hibernate, mit der gleichen ID zu aktualisieren und findet keine Zeile mit dieser ID, so dass es eine staleStateException gibt.

1

Ich stieß auf ähnliches Problem, wo ich versuchte, ein Objekt zu speichern, wo seine ID ein primitives Feld (lang) war, und zum Zeitpunkt der Erstellung des Objekts wurde die ID standardmäßig auf 0 gesetzt und Hibernate angenommen Ich wollte die Zeile mit id = 0 aktualisieren (was offensichtlich nicht existiert).

Meine Lösung war, das ID-Feld in Long (Wrapper) zu ändern, und wenn ich eine neue Instanz erstelle, wird die ID auf Null gesetzt, und Hibernate versteht, dass ich ein neues Element in die Datenbank einfüge.
Ich hoffe es hilft. Vielen Dank.

0

100% Lösung: 1 stellen Sie sicher, id in der Tabelle ist Autoinkrement alle Fremdschlüssel nicht null sind Umfang Sitzung ist eine Kaskade für Update

0

hinzufügen. löst das Problem, wenn Fremdschlüssel betroffen sind.

Verwandte Themen