JPA EntityManager限制DB上的并发操作数

时间:2014-02-17 06:09:37

标签: java jpa ejb-3.0 entitymanager

我正在使用JPA框架来执行一些数据库操作。

首先,我创建一个EntityManager对象,然后使用代码段保存特定表的实体对象

"entityManager.persist(specificEntity)"

这个持久化操作是从带有注释的方法

完成的
"@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)"

我尝试在该方法中使用for循环来保留大量数据,并且所有数据都保留在一个事务中。 通常情况下这一切都很好,但是当我试图坚持很多行时,我面临问题和错误

"Out of operation records in transaction coordinator (increase MaxNoOfConcurrentOperations)"

我的数据库支持大约32,000个并发操作。 那么在JPA框架中是否有任何方法来指定并发操作的最大数量。

1 个答案:

答案 0 :(得分:2)

我假设您在循环中创建实体,并且EntityManagers FlushModeType设置为COMMIT,这意味着EM等待您提交事务,直到将记录发送/插入数据库。

即使您可以放置​​EM max操作计数值,让AS在一个事务中处理数万个实体的插入(最坏的情况:甚至将事务数据写入等待提交的平面文件)肯定不是一个好主意。

要么对块进行某种批处理,要么至少在这种特殊情况下将FlushModeType自动提交的记录设置为AUTO开始。