Java 获取深度未知的内部实体

Java 获取深度未知的内部实体,java,jpa,Java,Jpa,我有一个类EntityA,它可能包含一个集合,我无法使用@NamedEntityGraph一次获取所有实体。 尝试同时获取所有实体是错误的设计吗?若否,可否这样做?我希望避免使用EAGERfetch。我考虑的另一个选择是使用Springprojection 编辑: 最后我做了这样的事: private void initializeEntitiesA(Set<EntityA> entities) { for (EntityA entity : entities) {

我有一个类
EntityA
,它可能包含一个
集合
,我无法使用
@NamedEntityGraph
一次获取所有实体。 尝试同时获取所有实体是错误的设计吗?若否,可否这样做?我希望避免使用
EAGER
fetch。我考虑的另一个选择是使用Spring
projection

编辑: 最后我做了这样的事:

private void initializeEntitiesA(Set<EntityA> entities) {
    for (EntityA entity : entities) {
        Hibernate.initialize(entity);
        initializeEntitiesA(entity.getEntities());
    }
}
private void initializeentiesa(设置实体){
for(实体A实体:实体){
初始化(实体);
初始化entity(entity.getEntities());
}
}

有什么好处吗?鉴于此方法是在特定情况下调用的,因此并非每次您都希望在不完整获取子实体的情况下获取
EntityA

无法在数据库端执行动态数量的联接,因此无法在一个单一数据集中实际获取所有实体。实现这一点的最快的一般方法是在每个级别上进行一次查询,这是JPA将为您做的事情(不急于做,但懒散做不会带来额外的成本)

如果您对特定数据了解得更多(例如,在99.9999%的情况下,正好有三个级别),您可以通过始终从三个外部自连接开始来执行微优化-这里,afaik,没有JPA实现可以帮助您


一般来说,我认为你的设计没有真正意义。如果你有很多这样的数据,请考虑一个图形数据库。

在数据库方面没有任何方法来执行动态连接,所以没有办法在一个勺子中实际获取所有的实体。实现这一点的最快的一般方法是在每个级别上进行一次查询,这是JPA将为您做的事情(不急于做,但懒散做不会带来额外的成本)

如果您对特定数据了解得更多(例如,在99.9999%的情况下,正好有三个级别),您可以通过始终从三个外部自连接开始来执行微优化-这里,afaik,没有JPA实现可以帮助您


一般来说,我认为你的设计没有真正意义。如果你有很多这样的数据,考虑一个图形数据库。

谢谢,这是我第一次听说一个图形数据库。我将与同事们分享这个想法。谢谢,这是我第一次听说图形数据库。我会与各位同事分享这个想法。