【发布时间】:2018-11-24 10:12:04
【问题描述】:
我是一个新的休眠用户。我一直在阅读本网站提供的用户指南 http://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html#fetching 他们开始谈论静态和动态获取,而没有介绍这些词。什么是静态和动态抓取?
【问题讨论】:
我是一个新的休眠用户。我一直在阅读本网站提供的用户指南 http://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html#fetching 他们开始谈论静态和动态获取,而没有介绍这些词。什么是静态和动态抓取?
【问题讨论】:
在 ORM(对象关系映射)中,获取是将相关数据加载到内存中的方式...
假设您提供的链接示例 390,当您从持久层加载员工时,你们两个有关于员工部门的选项:
1) 要么指示 ORM(休眠)在加载 Employee 后立即加载部门信息,要么
2) 指示 ORM 仅在需要时才加载关联的部门;即,当您致电employee.getDepartment().getName()时;
根据您的需要,您将在这两个选项中选择一个。为了告诉 ORM 你选择了什么选项,你使用静态抓取还是动态抓取...
静态获取是通过注释(或 XML)完成的,它被认为是静态的,因为一旦你编写它,它就不能在运行时更改......(请注意,像 @ManyToOne 这样的关系注释默认会强制执行 Fetch EAGER 策略)
动态获取,通过编程配置或运行时查询完成,允许您决定何时(如何)将相关数据加载到内存中......
【讨论】: