请解释hibernate Eager抓取和cascade-type all之间的区别。
在这两种配置中,我们可以加载与其父对象关联的子对象,然后在。
之间有什么区别答案 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)
级联是将entity state transition从Parent
实体传播到Child
,通过允许ORM工具持久化/合并/删除依赖关联来简化数据访问代码代表。
EAGER提取是一种映射时关联加载决策,因为它指示Hibernate在根实体加载时始终检索依赖关联。查询时间提取是首选,因为它为您提供了更好的灵活性,而LAZY提取映射策略可以被FETCH
指令覆盖。使用EAGER
获取您的信息时,因为您无法在查询时覆盖它,并且Hibernate将始终获取关联,即使在某些用例中您不需要它。