【问题标题】:override delete operation of an entity in JPA framework覆盖JPA框架中实体的删除操作
【发布时间】:2014-02-13 06:16:02
【问题描述】:

我有 2 个实体类(表 A 的 AEntity 和表 B 的 BEntity)。表 A 链接到表 B。所以 AEntity 类有一个 BEntity 的对象列表,并声明如下。

@OneToMany(mappedBy = "AEntity", cascade = CascadeType.REMOVE, fetch=FetchType.LAZY) 私有列表项 = new ArrayList();

如果我使用“entityManager.remove(aEntity)”删除 AEntity,这也会删除 B 表的 BEntity。

这对于少量数据是正确的。但如果数据增加,则会失败,并出现异常“Out of operation records in transaction coordinator (increase MaxNoOfConcurrentOperations)”。

发生此异常是因为它一次性删除了大量数据。 所以我想覆盖 BEntity 的删除/删除操作,并想使用分页来处理删除,也就是说,如果要删除总共 1 个缺少的行,我想在一个事务中删除 1000,然后再删除 1000。

我怎样才能做到这一点。 请帮忙

【问题讨论】:

  • 能否在单个数据库请求中删除批量 B,例如 1000 个 B 实体的列表?如果是这样,那么我有一个解决方案。

标签: java jpa ejb-3.0 entitymanager


【解决方案1】:

解决方案用伪代码描述如下(我没有使用你的技术,所以只能分享算法):

batchSize <- 1000
while A.listOfB.size() > batchSize do
    tempList <- A.listOfB.copyBatch(batchSize)
    tempList.deleteAll()
    A.listOfB.deleteBatch(batchSize)
end while
A.delete()

希望算法通俗易懂。

【讨论】:

    猜你喜欢
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多