2015-05-12 33 views
2

请解释一下hibernate提取和级联类型all之间的区别。Hibernate EAGER提取和级联类型有什么区别

在这两种配置中,我们可以加载与其父有关的子对象,那么什么是差异之间

+0

可能重复[FetchType LAZY和Java持久EAGER区别?(http://stackoverflow.com/questions/2990799/difference-between-fetchtype-lazy-and-eager-in-java-持久性) – DSF

回答

3

其简单:考虑两个实体1部和2员工,他们有一个一对多的映射。这是一个部门可以有许多员工 cascade = CascadeType.ALL这实际上意味着DepartmentEntity发生的任何更改都必须级联到EmployeeEntity。如果您保存一个部门,则所有关联的员工也将被保存到数据库中。如果删除部门,则与该部门相关的所有员工也将被删除。
级联式全部是PERSIST,REMOVE,MERGE和REFRESH级联类型的组合。Example for Cascade type All

提取类型Eager本质上与Lazy.Lazy相反,它是所有Hibernate注记关系的默认提取类型。当您使用Lazy fetch类型时,Hibernate不会加载该特定对象实例的关系。 Eager将默认加载与Hibernate加载的特定对象相关的所有关系Click here for an example.

1

Cascadingfetching是正交关系。

  1. 级联是有关从Parent实体传播的entity state transitionChild,通过允许ORM工具坚持/合并/删除代表了依赖协会简化了数据访问代码。

  2. EAGER抓取是一个映射 - 时间关联加载的决定,因为它指示Hibernate总是在根实体加载时检索依赖的关联。查询时间获取是首选,因为它提供了更好的灵活性,而LAZY获取映射策略可以被FETCH指令覆盖。用EAGER获取你的卡住,因为你不能在查询时重写它,并且Hibernate将总是获取关联,即使在某些使用情况下你不需要它。的

+0

Ok ..但是当我们说cascadetype全部时,在选择查询的情况下,它会同样加载所有关联的实体,以便在提取时可以检索所有关联的对象类。然后在什么条件下使用它们 –

+0

仔细阅读答案。我已经回答了您的评论问题 –

相关问题