Hibernate EAGER fetch和cascade-type all有什么区别

时间:2015-05-12 04:54:52

标签: java hibernate jpa orm fetch

请解释hibernate Eager抓取和cascade-type all之间的区别。

在这两种配置中,我们可以加载与其父对象关联的子对象,然后在。

之间有什么区别

2 个答案:

答案 0 :(得分:4)

简单:考虑两个实体1.部门和2.员工,他们有一对多的映射。这是一个部门可以有很多员工 cascade = CascadeType.ALL 它实质上意味着DepartmentEntity上发生的任何更改都必须级联到EmployeeEntity。如果保存部门,则所有关联的员工也将保存到数据库中。如果删除部门,则同时删除与该部门关联的所有员工。
级联式全部是PERSIST,REMOVE,MERGE和REFRESH级联类型的组合。 Example for Cascade type All <登记/>
Fetch类型Eager本质上与Lazy.Lazy相反,后者是所有Hibernate注释关系的默认提取类型。当您使用Lazy fetch类型时,Hibernate将不会加载该特定对象实例的关系。 Eager将默认加载与Hibernate加载的特定对象相关的所有关系Click here for an example.

答案 1 :(得分:4)

Cascadingfetching是正交问题。

  1. 级联是将entity state transitionParent实体传播到Child,通过允许ORM工具持久化/合并/删除依赖关联来简化数据访问代码代表。

  2. EAGER提取是一​​种映射时关联加载决策,因为它指示Hibernate在根实体加载时始终检索依赖关联。查询时间提取是首选,因为它为您提供了更好的灵活性,而LAZY提取映射策略可以被FETCH指令覆盖。使用EAGER获取您的信息时,因为您无法在查询时覆盖它,并且Hibernate将始终获取关联,即使在某些用例中您不需要它。