如何防止JPA插入锁定数据库表?

Jam*_*hon 5 java database persistence hibernate jpa

我正在使用Hibernate支持的JPA作为我的持久层.我有一个多线程进程,它聚合来自Soap调用的数据,然后在数据库中存储一行.该过程通常最终会插入大约700行,大约需要1-3个小时,而Soap调用是主要的瓶颈.

在整个过程中,我插入的表会锁定,并且不会及时返回select语句.

这是SQL服务器错误:

错误消息:超出锁定请求超时时间.

如何在这个漫长的过程中避免锁定我的数据库表?

Mic*_*les 1

您是否使用同一事务插入所有 700 行?

你的交易边界在哪里?如果您可以降低事务边界,即仅事务实际的插入操作,以便短暂保留锁。

如果您需要使整个过程保持原子性,则可能需要将其写入临时表,然后执行批量插入(快速)以将其插入主表中。