相关疑难解决方法(0)

行被另一个事务更新或删除(或未保存的值映射不正确)

我有一个在Web服务器上运行的java项目.我总是遇到这个例外.

我阅读了一些文档,发现悲观锁定(或乐观,但我认为悲观更好)是防止此异常的最佳方法.

但我找不到任何解释如何使用它的明确例子.

我的方法是这样的:

@Transactional
Public void test(Email email, String Subject){
   getEmailById(String id);
   email.setSubject(Subject);
   updateEmail(email);
}
Run Code Online (Sandbox Code Playgroud)

而:

  • Email 是一个hibernate类(它将是数据库中的一个表)
  • getEmailById(String id)是一个返回的函数email(此方法未注释@Transctional)
  • updateEmail(email):是一种更新电子邮件的方法.

注:我使用Hibernate进行保存,更新和等(例如:session.getcurrentSession.save(email))

例外:

ERROR 2011-12-21 15:29:24,910 Could not synchronize database state with session [myScheduler-1]
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [email#21]
    at org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1792)
    at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2435)
    at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2335)
    at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2635)
    at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:115)
    at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:168)
    at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
    at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
    at …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate amazon-web-services pessimistic-locking

57
推荐指数
5
解决办法
20万
查看次数