假设您有一个带有延迟加载属性B
的类c
。除了以下内容之外,这在系统的任何地方都很好:
您的课程A
的课程b
属性为B
。每当您加载A
类型的实体时,您都希望非懒惰地加载完整的a.b.c
链。
有没有办法在Hibernate中设置这种类型的逻辑?
修改:
还可以使用formula
(即SQL表达式)定义属性。文档说:
衍生出强大的功能 属性。这些属性是由 只读定义。该物业 值在加载时计算。您 将计算声明为SQL 表达。然后转换为a SQL中的SELECT子句子查询 加载实例的查询:
<property name="totalPrice"
formula="( SELECT SUM (li.quantity*p.price) FROM [...] )"/>
如果是返回Hibernate对象的Hibernate查询,这将有效。
编辑2:
其他想法包括声明类B2
与B
完全相同,除了它的C
属性不是延迟加载的。
到目前为止,选项是:
B2
创建b.c
课程。 (有点丑陋)。答案 0 :(得分:2)
如果这不是您应用中的常见情况(并且不应该如此),您可以在使用Hibernate.initialize(..)
A
对象后手动初始化从属对象
答案 1 :(得分:1)
使用HQL,如下所示:
from A as a
inner join fetch a.b
inner join fetch b.c