V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
papertiger9919
V2EX  ›  问与答

spring jpa 中, entity 不能同时 eager fetch 多个嵌套的集合类型的属性?

  •  
  •   papertiger9919 · 2023-07-30 10:42:27 +08:00 · 560 次点击
    这是一个创建于 483 天前的主题,其中的信息可能已经有所发展或是发生改变。

    拼接查询如下:

    Root<JpaUser> root = criteriaQuery.from(JpaUser.class)
    Fetch<Object, Object> blogList = root.fetch("blogList", JoinType.LEFT);
    Fetch<Object, Object> textList = blogList.fetch("textList", JoinType.LEFT);
    List<JpaUser> resultList = em.createQuery(criteriaQuery).getResultList();
    
    报错:cannot simultaneously fetch multiple bags......[blogList, textList]
    大致意思是不能同时 fetch blogList 和 textList
    

    问了 gpt ,回答如下: 假设有三个实体类 A 、B 和 C ,
    A 和 B 是一对多关系,B 和 C 也是一对多关系。
    尝试使用 FetchType.EAGER 获取 A 实体的 B 集合属性( List 或 Set ),
    并同时使用 FetchType.EAGER 获取 B 实体的 C 集合属性( List 或 Set )时,
    JPA 将会在一次查询中获取 A 、B 和 C 实体的所有数据,这可能导致查询结果中出现大量的冗余数据。

    集合属性用的是 List 声明,把 List 改成 Set 就可以了,但是 Set 没有顺序不方便,
    按理说 fetch(join) 多个表应该没问题,为什么 jpa 不支持?如何实现 fetch 多个 List 属性呢?

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2654 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:33 · PVG 08:33 · LAX 16:33 · JFK 19:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.