首页 > 解决方案 > Hibernate:冗长的 ArrayLists 的持久性优化

问题描述

我在使用数据库时遇到了多个瓶颈。我正在使用通过 Hibernate ORM 访问并用 Java 8 编写的 PostgreSQL。

这是需要优化的类的示例:

public class RightEntity {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @ElementCollection
  @LazyCollection(LazyCollectionOption.FALSE)
  private List<Long> readableEntity = new ArrayList<Long>();
}

RightEntity 是一个允许访问 Id 列表(Long 列表)的对象。问题是每当我加载这个实体时,包含数百个元素的列表 readableEntity 可能需要几秒钟才能同时加载。这是一个巨大的瓶颈,因为它几乎用于我服务器的每个 API 和管理器中。

我的问题是:如何优化此代码以使其运行更顺畅?

LazyCollectionOption.FALSE 类似于 FetchType.Eager 我尝试延迟加载它,它运行得更快,但每当我尝试加载列表时都会得到一个 LazyCollection,因此我正在探索替代方案或修复方法。

谢谢 !

标签: javapostgresqlhibernatejpapersistence

解决方案


有一种JOIN FETCH机制可以正确访问惰性集合。您可以在 JPQL 查询中使用它来填充惰性集合。

看看Hibernate 开发人员的这个解释。您还可以看到这个SO question 以替代使用批次。


推荐阅读