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

在JPA框架中覆盖实体的删除操作

孔梓
2023-03-14

我有2个实体类(表A的实体和表B的实体)。表 A 链接到表 B。因此,实体类具有 B 实体的对象列表,并声明如下图所示。

@OneToMany(mappedBy=“AEntity”,cascade=CascadeType.REMOVE,fetch=FetchType.LAZY)private List items=new ArrayList();

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

对于少量数据,这是正确的。但如果数据增加,则失败,并出现异常事务协调器中的操作记录不足(increase MaxNoOfConcurrentOperations)”。

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

我该如何实现这一点。请帮帮忙

共有1个答案

公羊浩气
2023-03-14

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

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

我希望算法易于理解。

 类似资料:
  • 问题内容: 我正在使用EF 4 STE对附件对象进行建模。该 附件 包含了名称,描述,日期,以及最重要的数据()。为了优化加载,我不想在绝对必要之前(即当用户从客户端单击时)检索Data属性。 为了遵循这种方法,我使用了此处描述的表拆分技术。我将“ 附件” 表分为“ 附件” (“名称”,“描述”,“日期”)和“ AttachmentData” (数据)。在我的EF模型中,这是一对一的关系。一切正常

  • 主要内容:JPA实体删除示例要从数据库中删除记录,可以使用接口提供方法。方法使用主键来删除特定的记录。 JPA实体删除示例 在这里,我们将演示如何根据主键删除指定学生的信息。 完整的项目代码如下所示 - 这个例子包含以下步骤 - 第1步: 在包下创建一个名为的实体类,它包含属性:,和。 文件:StudentEntity.java 的代码如下 - 第2步: 将实体类和其他数据库配置映射到文件中。 文件:persistence.

  • 有两个实体具有关系@ManyToOne和@OneTomany(类别和产品)。当我启用(cascade=cascadeType.all)时,Products中的一条记录会删除一个类别,这是不好的。该实体的结果是只有删除发生在一个地方(表)而没有级联(相关)删除为另一个引用必须做什么???我使用的是spring 5.1.5(不是spring boot)谢谢! spring 5/TOMCAT 9/jac

  • 我们正在启动一个新应用程序。我们想使用实体框架。我们几乎不怕意外删除sql行(尤其是意外设置相关数据等) 我想禁用每一次删除,因为我们只是用“validUntil”列标记每一行,而从不删除行。 我看到它可以通过sql中的角色来完成,但我希望所有逻辑和控制都只在代码中。 也许在实体框架核心中有新的特性来支持这一点?我知道它仍然可以用EF编写行sql,但我们并不害怕这种情况。 我还尝试删除实体关系的s

  • 我正在实现一个基于ASP MVC 5和Entity Framework 6的Web应用程序。解决方案是按区域组织的(目前只有一个区域…)每个区域都有自己的DBContext。请参见解决方案图。 在DBContext中,我定义了一个在运行时分配给上下文的连接字符串名称,因为它依赖于登录变量。 当我尝试添加迁移或从控制台更新数据库时,即使我显式指定了连接字符串(并且连接字符串存在于主web.confi

  • 问题内容: 我正在尝试在我的django rest框架上应用此修复程序 将根元素添加到json响应(django-rest- framework) 但是我不确定如何在django rest框架上覆盖json序列化程序,任何帮助都将是很大的。 最终结果将是在Json上具有根节点名称,因为现在它只是一个没有根名称的对象数组,即 不是这样的 [{“ foo”:“ bar”}] 我需要像这样 {“ ele