获取未知深度的内部实体

时间:2019-05-21 08:37:48

标签: java jpa

我有一个类EntityA,其中可能包含一个Set<EntityA>,但我无法使用@NamedEntityGraph一次获取所有实体。 尝试一次获取所有实体是错误的设计吗?如果没有,有可能这样做吗?我想避免使用EAGER提取。我想到的另一种选择是使用Spring projection

编辑: 我最终是这样的:

private void initializeEntitiesA(Set<EntityA> entities) {
    for (EntityA entity : entities) {
        Hibernate.initialize(entity);
        initializeEntitiesA(entity.getEntities());
    }
}

有什么好处吗?给定此方法是在特定情况下调用的,而不是每次都不想在其子实体不完整的情况下获得EntityA

1 个答案:

答案 0 :(得分:0)

无法在数据库端执行动态数量的联接,因此无法在单个独家消息中实际获取所有实体。最快的通用方法是按级别进行单个查询,这就是JPA会为您执行的操作(不急于执行,但是懒惰地执行此操作不会产生任何额外的成本)。

如果您对特定数据了解更多(例如,在99.9999%的情况下恰好有三个级别),则可以通过始终从三重外部自联接开始执行微优化-在这里,afaik,没有JPA实施将为您提供帮助。

通常,我认为您的设计没有真正意义。如果您有大量此类数据,请考虑使用图形数据库。