我在数据库使用中遇到了多个瓶颈。我正在使用通过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是一个对象,它允许访问Ids列表(Long列表)。问题是,每当我加载该实体时,包含数百个元素的列表可读实体可能会同时花费几秒钟的时间。这是一个巨大的瓶颈,因为它几乎用在我服务器的每个API和管理器中。
我的问题是:如何优化此代码以使其运行更流畅?
LazyCollectionOption.FALSE与FetchType.Eager相似我尝试过懒地加载它,它运行起来快得多,但是每当尝试加载列表时,我最终都会得到一个LazyCollection,因此我正在研究替代方法或修复方法。
谢谢!
[[0]有一种机制可以正确访问惰性集合。您可以在JPQL查询中使用它来填充惰性集合。
请看Hibernate开发人员的JOIN FETCH
说明。您也可以查看this SO问题以了解使用批处理的替代方法。