我在"hibernate in action"一书中看到了以下陈述.任何人都可以告诉我如何在运行时覆盖策略.并且你可以采取相反的方式,即我已经获取策略设置懒惰为假,我想将其设置为真?
"延迟提取允许您决定在第一次数据库命中时加载了多少对象图,以及只有在首次访问时才应加载哪些关联.延迟提取是对象持久性的基本概念,也是实现可接受性能的第一步.我们建议,首先,所有关联都要配置为在映射文件中进行延迟(或者可能是批处理的延迟)获取.然后可以在运行时通过迫使急切提取的查询来覆盖此策略."
And*_*ate 32
如果您在查询中使用HQL,则可以使用"fetch"关键字指定您的急切提取,如下所示:
from Cat as cat
inner join fetch cat.mate
left join fetch cat.kittens child
left join fetch child.kittens
Run Code Online (Sandbox Code Playgroud)
如果您正在使用Criteria Query API,则可以使用setFetchMode指定获取模式
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.setFetchMode("mate", FetchMode.EAGER)
.setFetchMode("kittens", FetchMode.EAGER)
.list();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27000 次 |
| 最近记录: |