当fetch类型渴望所有子实体时,需要帮助来访问几个值

时间:2016-01-20 05:49:01

标签: java performance hibernate fetch

假设

  1. 我有一个父实体" A"和子实体" B"," C"," D"和" E"

  2. 一对多映射定义为获取类型,因为渴望A的所有子实体,即" B"," C"," D& #34;和" E"

  3. B,C,D,E与多对一联系 - " P"实体

  4. 现在,当我得到" A"实体...所有正在加载,以下查询需要很长时间

    FROM A ORDER BY pkey DESC 
    

    检索" A" entity ..我将迭代B并获得" P"主键来自同一个。同样地,我需要" P"的所有主键。与" B"," C"," D"和" E"

    1. 是否可以编写任何HQL以仅获取主键而不加载整个实体而不考虑或绕过已经使用fetch类型定义的注释作为eager?

    2. 我们可以将抓取类型更改为渴望延迟,为每个实体执行单独的查询以获取值吗?

    3. 添加批量大小以获取类型是否很有效?

    4. 您能否建议我们如何处理这三个问题以及解决此问题的最佳方法是什么?

      感谢。

1 个答案:

答案 0 :(得分:0)

很难理解你的映射,并且在没有持久类的情况下做提议(“谈话很便宜。给我看代码。”)。

  1. 有可能。将此HQL称为模板(适用于B的孩子 只)

    select p.pid from P p inner join p.b where b.a.pid = : pidOfA

  2. 你当然应该这样做。参考 this为一个人 如何做到这一点。

  3. 可能批量提取会有所帮助,但我不认为这是一个 正确的策略。

  4. 如果您还没有这样做,请从Hibernate 5文档中阅读Chapter 20. Improving performance