当前位置: 首页 > 知识库问答 >
问题:

Hibernate:当10个或更多用户同时插入一条记录时的异常

叶书
2023-03-14

我有一个适用于Spring MVC和Hibernate的应用程序。如果单个用户插入一条记录,它可以正常工作,但如果多个用户同时插入记录。它显示此错误“Hibernate:org.hibernate.AssertionFailure: null id in”。我可以观察到这种情况正在发生,因为hibernate对所有记录的自动主id genaration可能是相似的,因为时间相同。不确定this.Please帮助。需要关键修复。

我使用代码如下

@Transactional
public Account addAccount(Account acct) {

      session = sessionFactory.getCurrentSession();
      session.save(acct);
      session.flush();
      session.clear();
      return acct;

}

共有1个答案

欧照
2023-03-14

如果存在并发问题,请考虑创建此类:

public AccountConcurrencyUtils {

    public static synchronized Account addAccount(Account acct, SessionType session) {
        session = sessionFactory.getCurrentSession();
        session.save(acct);
        session.flush();
        session.clear();
        return acct;
    }

}

最后,在代码中:

@Transactional
public Account addAccount(Account acct) {
    return AccountConcurrencyUtils.addAccount(acct, session);
}

这应该可以防止并发问题,如果您使用Java7,应该有更好的解决方法,但如果是关于并发的,这应该可以解决您的问题,如果不是,问题可能是其他的。

我更新了代码,把你正在使用的会话类型,这应该适用于旧的Java版本,如java 5

 类似资料:
  • 本文向大家介绍php CI框架插入一条或多条sql记录示例,包括了php CI框架插入一条或多条sql记录示例的使用技巧和注意事项,需要的朋友参考一下 1、插入一条记录 2、插入多条记录

  • 我在Parent中提供了一个简单的oneToMany关系,并在Chile Entity类中提供了相应的ManyToOne: 起源: } 儿童班级: 操作类: 示例案例:Status_code Reason_text abc abc1 xyz xyz1 保存表单:Status_code Reason_text abc abc1 xyz xyz1 abc abc1 xy z xyz2 对于任何操作:N

  • 我有一个存储任务的表,还有一个存储该任务的有序步骤的表。步骤属于一个任务父级(因此一个任务与一个步骤具有一对多的关系),每个步骤都有一个“序号”--它是哪个步骤号。我希望序号和父任务ID是一个组合的唯一约束,因此,例如,单个任务永远不能结束两个不同的步骤设置为“Step1”,但不同的任务可以各自有自己的“Step1”。 我希望能够同时更新属于一个任务的每一步的序数,这样我就不会违反唯一约束。因此,

  • 问题内容: 我有一个产品对象,它属于某些类别,即经典的多对一关系。 我想插入和更新产品而不预先选择类别。像这样: 要么 是否可以在不选择类别的情况下进行更新和插入?我不想为此使用HQL或直接查询。 问题答案: session.load()专门用于此类情况。以下: 不会打数据库。但是,如果没有提供给定ID的类别,它将在稍后阶段(刷新期间或多或少)引发异常。 使用速度快且没有副作用(级联等)。

  • 我将一行一行地插入数据,但我在某处听说,如果有许多数据要插入,则需要很多时间。那么,如何一次将它们全部插入?

  • 我有两个实体类,如下所示- 我在保存子记录时出错。 错误- Hibernate:插入子(名称,child\u id)值(?,)2022-07-19 23:12:31.727警告20940---[nio-8080-exec-2]o.h.engine.jdbc.spi。SqlExceptionHelper:SQL错误:0,SQLState:23502 2022-07-19 23:12:31.727错误