Hibernate:在HQL中重写映射的EAGER? [英] Hibernate: Overriding mapping's EAGER in HQL?

查看:214
本文介绍了Hibernate:在HQL中重写映射的EAGER?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可以在HQL中使用 LEFT JOIN FETCH 覆盖 LAZY

  FROM Obj AS obj LEFT JOIN FETCH obj.otherObj WHERE obj.id =:id 

是否可以覆盖 EAGER ?如何?

解决方案

这段代码中的限定符来自 Hibernate Docs 意味着你可以用急切的方式重写懒惰,但不能用其他方式:如果你正在使用属性级的lazy
fetching(使用字节码
instrumentation),那么


b迫使Hibernate立即使用获取所有
属性来获取第一个查询
中的懒
属性。




通常情况下,如果您使用Criteria API从急于变为懒惰,看起来可以。只需在相关连接上调用 setFetchMode(FetchMode.LAZY)即可。


It's possible to override LAZY in HQL using LEFT JOIN FETCH.

FROM Obj AS obj LEFT JOIN FETCH obj.otherObj WHERE obj.id = :id

Is it also possible to override EAGER? How?

解决方案

The qualifier in this snippet from the Hibernate Docs implies that you can override lazy with eager, but not the other way around:

If you are using property-level lazy fetching (with bytecode instrumentation), it is possible to force Hibernate to fetch the lazy properties in the first query immediately using fetch all properties.

Unusually, it looks like you can if you use the Criteria API to go from eager to lazy. Just call setFetchMode(FetchMode.LAZY) on the relevant join.

这篇关于Hibernate:在HQL中重写映射的EAGER?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆