【问题标题】:Spring / Hibernate : org.hibernate.StaleStateException: Batch update returned unexpectedSpring / Hibernate:org.hibernate.StaleStateException:批量更新返回意外
【发布时间】:2014-11-14 07:09:44
【问题描述】:

我需要从数据库中获取一些数据,并根据结果再执行一次查询。

但我遇到了异常:

org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1

我的代码:

Session tempSession1 = HibernateUtil.getSessionFactory().openSession();
                 Session tempSession2 = HibernateUtil.getSessionFactory().openSession();
                                   Criteria criteriaApplication = tempSession1.createCriteria(Entity.class);
               try {

                    List list = criteriaApplication.add(Restrictions.eq("app__id",Entity.sys_id()).ignoreCase()).list();
                    tempSession1.flush();
                    tempSession1.close();
                    if (list.size() > 0) {


                          tempSession2.update(Entity);
                          tempSession2.flush();
                          tempSession2.close();


                     }

请帮忙。有人可以修改我的代码吗?

【问题讨论】:

  • 您能澄清一下您要做什么吗?什么是 Entity 以及它在哪里/如何声明?在哪一行抛出异常?

标签: java spring hibernate jakarta-ee


【解决方案1】:

当你得到这个异常时

*根据您的锁定设置,您要更新的会话中的实体不够最新

*您要更新的会话中的实体不再存在于数据库中

【讨论】:

  • 不一定,如果实体已被另一个并发事务更新,也会发生此错误。
  • 但 AFAIK 由于乐观锁定,默认设置不会发生这种情况
  • 嗯,不知道你的意思。当使用乐观锁定并且另一个并发事务对实体进行了更新时,会出现此异常。
  • 在乐观锁定上,我可以让 5 个线程都读取同一个实体,并增加一个值,例如读取 A=5 并使其 A=6,然后将其全部写回,没有错误。
猜你喜欢
  • 2016-07-17
  • 1970-01-01
  • 2017-12-09
  • 2014-02-03
  • 2017-07-28
  • 2022-01-06
  • 2019-01-18
  • 2012-01-11
  • 1970-01-01
相关资源
最近更新 更多