当前位置: 首页 > 面试题库 >

JPA /Hibernate大集合

马冯浩
2023-03-14
问题内容

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

父母-@OneToMany Collection孩子;

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

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

谢谢,皮奥特


问题答案:

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

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

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

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

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

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

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



 类似资料:
  • 问题内容: 在具有两种类型的实体(父级和子级)的场景中: 父母-@OneToMany Collection孩子; 默认设置是对子级集合进行延迟加载。这种模式对少数儿童非常有效,但是如果这个数字很大,这似乎是不可持续的。因此,在某些情况下,我认为孩子的数量会很大,因此我使用了分页的服务方法(例如“ getChildren(父父母,int偏移量,int计数)”)。 问题是:这是处理此类情况的最佳方法吗

  • 环境:Spring 4,Hibernate 4,JPA 如果调用builderdao.delete(实体),我们会在线程“main”org.springframework.dao.invaliddataaccessapiusageException中得到异常:只读模式(flushmode.manual)中不允许写操作:将会话转换为flushmode.commit/auto或从事务定义中删除“rea

  • 问题内容: 我以这样一种方式进行了JPA设置:如果我不使用延迟加载,则几乎将加载整个数据库。我也直接在模型上使用序列化,因此有时我需要初始化代理。 我只想在集合上使用延迟加载。急切地获取一些奇异实体的事实就很好了。但是,无论我如何尝试设置集合,我都永远不会得到代理集合,而我总是会得到完全加载的集合。 这是一些示例代码: 所以这里的问题是,当我检查调试器时,答复的persistantBag-list

  • 问题内容: JPA /hibernate查询中允许的联接数是否有限制? 由于Hibernate 不会自动加入,因此我必须在JPA / Hibernate查询中明确指定加入。例如,一个人有一个地址,一个地址有一个状态。以下查询检索地址和状态已满的人员: 随着我不断添加联接,最终(在左联接12-13之后)达到了Hibernate生成无效SQL的限制: 我确实将Hibernate的方言设置为数据库实现M

  • 问题内容: 我以这样一种方式进行了JPA设置:如果我不使用延迟加载,则几乎将加载整个数据库。我也直接在模型上使用序列化,因此有时我需要初始化代理。 我只想在集合上使用延迟加载。急切地获取某些奇异实体的事实就很好了。但是,无论我如何尝试设置集合,我都永远不会得到代理集合,而我总是会得到完全加载的集合。 这是一些示例代码: 所以这里的问题是,当我检查调试器时,答复的persistantBag-list

  • 我需要通过在Hibernate中执行本机查询获得结果集。虽然我使用的是EntityManager,但查询和结果集可能不是实体。 当我尝试下面的代码时,我得到了一个结果。因为我要求的是一个有值的结果。(Hibernate JPA) 结果是:爱丽丝 当我试图从相同的代码中获得多个select out(查询为select name)时,指定来自fresher_test(其中id=1) 这有一种方法,我可