首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何防止JPA插入锁定数据库表?

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

Stack Overflow用户
提问于 2009-07-30 19:50:56
回答 3查看 9K关注 0票数 5

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

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

下面是SQL server错误:

错误消息:锁定请求超时超过了。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-31 10:07:51

是否插入具有相同事务的所有700行?

您的事务边界在哪里?如果您可以降低您的事务赏金,即只处理实际的insert操作,以便锁被保持。

如果您需要整个过程是原子化的,那么最好将其写入临时表,然后执行批量插入(fast)将其插入主表中。

票数 1
EN

Stack Overflow用户

发布于 2009-07-30 19:56:57

您可能需要更改隔离级别。

以下是一些信息:http://www.interview-questions-tips-forum.net/index.php/Your-Questions-on-Java/JDBC-Transaction/Transaction-Isolation-Levels

它谈到了不同的隔离级别,以及它们能帮助防范什么。这样做的一般方法是从严格的人员开始,如果需要更好的响应时间,则降低响应时间,同时铭记数据完整性/错误读取的要求。

编辑

Spring事务级别用于抽象事务管理器中的JDBC (或其他什么)事务隔离级别。它们是在TransactionDefinition类中定义的,并且是静态成员。

代码语言:javascript
运行
复制
TransactionDefinition.ISOLATION_DEFAULT
Default isolation

TransactionDefinition.ISOLATION_READ_UNCOMMITTED
Lowest level of isolation; allows transactions to see uncommitted modifications from other transactions

TransactionDefinition.ISOLATION_READ_COMITTED
Cannot read uncommitted data

TransactionDefinition.ISOLATION_REPEATABLE_READ
Ensures repeatable reads

TransactionDefinition.ISOLATION_SERIALIZABLE
Most reliable; all transactions are executed atomically, and are treated as though they occurred serially.

还存在事务传播级别。您可能正在使用事务进行纯读,这可能是过度的-读不需要事务,写应该始终有一个事务围绕着它们。在TransactionDefinition中传播水平也是确定的。它们通常在弹簧连接文件中用于定义特定调用的序列化和传播。如果你有一个连接的例子,我可能会给出更多的提示/信息。

票数 2
EN

Stack Overflow用户

发布于 2009-07-30 19:58:46

您是否试图在一个JPA事务中发出700个soap请求?别干那事。:-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1208936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档