JPA - 如何通过 JPA 有效获取父级的所有子级?

问题描述

有如下父子类

@Entity
class Parent {

   @Id
   Long id;

   @OnetoMany(orphanRemoval = true,cascade = CascadeType.ALL)
   List<Child> children;
}

@Embeddable
class Child{

   @Id
   Long id;

   // child does not have parent id
}

我正在使用 objectdb 和 JPA。我的数据库变大了,有些父母有 50 万个孩子。 通常,为了获取父级的所有子级,我正在加载父级并通过延迟加载将子级作为 parent.getChildren() 访问。 但是,由于列表太大,需要大量内存。

如何以高性能的方式将特定父级的所有子级作为轻量级 DTO 对象列表?

额外问题:如何有效删除父级的所有子级?

解决方法

将子项设置为可嵌入是一种可能的解决方案。请注意,在这种情况下,不需要 id 字段,该字段未使用且仅占用空间。您可以通过清除集合来删除可嵌入的子项。

为了提高性能,您可能需要不同的设计,其中并非每次都加载所有 500K。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...