在域模型中处理大型集合的好方法 - 使用 JPA/Hibernate ORM?

HDa*_*ave 3 java mapping dns service jpa

我的域类中有一些OneToMany子集合,它们可能会随着时间的推移而增长,以容纳数百或(很可能)数千个实例。然而,通常父母真正需要的只是“第一个”孩子或“最后一个”孩子或“最大”的孩子。让父实例循环遍历从数据库加载的大量对象集合似乎效率很低。

另一方面,我不想因为持久性问题而污染我的域模型,并开始必须在域类中使用我的 DAO 来执行查询。

我可能会将这些查找放在我的服务方法中,但我真的更喜欢将此登录名放在它所属的域中 - 试图避免“贫血域”反模式。

有没有一种方法可以从大集合中提取“特定”对象而不直接调用 DAO?我忽略了一些 JPA ORM 映射功能?

编辑: 应用程序是分层设计的,域模型层位于底部——它不依赖于其他任何东西。接下来是持久层,它实现 DAO 并依赖于域层。在它们之上是一个服务层,我试图通过将业务逻辑下推到域层来使其尽可能薄。

mat*_*t b 5

这里有很多选择

  1. 使用延迟加载批量获取
  2. 使用 HQL 或 Criteria 查询,甚至下拉到本机 SQL 来限制结果数量(换句话说,不是导航集合,而是执行查询以返回所需的 N 个项目)
  3. 如果可以选择缓存,则至少在某些时候您可以避免访问数据库。