假设您的类B
带有延迟加载的属性c
。并且除了以下内容,系统在任何地方都可以使用:覆盖Hibernate的延迟加载的最佳方法
您有一个类A
,属性为B
,属性为b
。无论何时加载A
类型的实体,您都希望非懒惰地加载完整的a.b.c
链。
有没有办法在Hibernate中设置这种类型的逻辑?
编辑:
的属性也可以用一个formula
这是一个SQL表达式定义。该文档说:
一个强大的功能是导出 属性。这些属性是由 定义为只读。 值是在加载时计算的。您 将计算声明为SQL 表达式。然后,这将转换为 SELECT子句子查询中加载一个实例的SQL查询 :
<property name="totalPrice"
formula="(SELECT SUM (li.quantity*p.price) FROM [...])"/>
,如果它是返回一个Hibernate对象的Hibernate查询这会工作。
编辑2:
其他想法包括声明一个类B2
这是完全一样B
除了它的C
属性不延迟加载。
到目前为止,选项:
- 每次依靠查询,通过skaffman的建议。
- 在属性中使用公式来获取我想要的字段,但是没有对象。
- 创建一个
B2
类非懒惰b.c
。 (有点丑)。
对于那些很好的查询。但是如果我遍历另一个对象的'.a'属性,我就不会一次性获得'a.b.c'。 – z5h 2010-02-14 20:20:32
这的确如此,但是如果你将'B.c'配置为延迟加载,那么这就是它的行为。如果你想覆盖它,那么你需要编写你的查询来显式获取它。 – skaffman 2010-02-14 20:31:54