一尘不染

JPA /Hibernate大集合

hibernate

在具有两种类型的实体(父级和子级)的场景中:

父母-@OneToMany Collection孩子;

默认值为对子级集合进行延迟加载。这种模式对少数儿童非常有效,但是如果这个数字很大,这似乎是不可持续的。因此,在某些情况下,我认为孩子的数量会很大,因此我使用了分页的服务方法(例如“
getChildren(父父母,int偏移量,int计数)”)。

问题是:这是处理此类情况的最佳方法吗?还是我错过了什么?

谢谢,皮奥特


阅读 227

收藏
2020-06-20

共1个答案

一尘不染

这种模式对少数儿童非常有效,但是如果这个数字很大,这似乎是不可持续的。

我要说的是,这完全取决于您想对他们做什么,但是在大多数情况下,这是事实。

因此,在某些情况下,我认为孩子的数量会很大,因此我使用了分页的服务方法(例如“ getChildren(父父母,int偏移量,int计数)”)。

如果您需要显示(可能非常)大量的结果 进行浏览,
则分页是一种非常自然的方法。人类通常不想要或不需要所有记录,而且他们无论如何也无法处理大量结果。应用程序必须立即处理所有结果的情况当然有所不同,但是JPA可能根本不适合它们。

问题是:这是处理此类情况的最佳方法吗?还是我错过了什么?

IMO,这绝对比通过调用获得的整个集合提供结果页要好得多parent.getChildren(),它将节省一些数据库,网络,应用服务器资源。

您可能考虑的另一件事是限制搜索时的最大结果数。而不是分页10个结果(到底是谁去浏览?),(至少根据我的经验)通常要求用户执行更严格的搜索,即添加搜索条件,直到结果数量变得可人工管理为止。不过,这与您最初提出的问题有些不同。

2020-06-20