代码之家  ›  专栏  ›  技术社区  ›  Mark Bolusmjak

在此实例中重写hibernate延迟加载的最佳方法

  •  1
  • Mark Bolusmjak  · 技术社区  · 15 年前

    假设你有课 B 具有延迟加载的属性 c . 这在整个系统中都很好,除了以下几点:

    你有课 A 有财产 b 阶级的 . 每当加载类型为的实体时 你想装满 a.b.c 锁链不懒。

    有没有办法在hibernate中设置这种逻辑?

    编辑:
    属性也可以定义为 formula 这是一个sql表达式。文件上说:

    一个强大的特性 性质。这些属性由 定义只读。财产 值在加载时计算。你 将计算声明为sql 表达式。这就意味着 sql中的select子句子查询 加载实例的查询:

    <property name="totalPrice"
        formula="( SELECT SUM (li.quantity*p.price) FROM [...] )"/>
    

    如果是返回hibernate对象的hibernate查询,那么这将起作用。

    编辑2:
    其他的想法包括声明一个类 B2 这和 除了它 C 属性不是延迟加载的。

    目前的选择是 :

    1. 根据skaffman的建议,每次都依赖一个查询。
    2. 在属性中使用公式来获取我想要的字段,但没有对象。
    3. 创建一个 地下二层 非懒惰类 b.c . (有点难看)。
    2 回复  |  直到 9 年前
        1
  •  1
  •   skaffman    15 年前

    使用hql,如下所示:

    from A as a
        inner join fetch a.b
        inner join fetch b.c
    
        2
  •  2
  •   David    12 年前

    如果这不是应用程序中的常见情况(而且不应该如此),则可以在获取 A 对象,使用 Hibernate.initialize(..)