【发布时间】:2021-09-05 09:30:39
【问题描述】:
我目前的理解是 FetchType.EAGER 仅在以下情况下是首选的:
- 关联的获取策略为
@Fetch(FetchMode.JOIN)或@Fetch(FetchMode.SUBSELECT),因此Hibernate在加载根实体时会进行批量查询。 - 我们希望确保根实体和关联实体在同一个事务中加载,但这也可以通过其他机制强制执行(例如使用
@Transactional)。
在其他情况下,FetchType.LAZY 总是有助于减少数据库请求的数量。这是正确的吗?
【问题讨论】:
-
据我所知,如果您需要再次调用来获取数据,请使用 EAGER。如果您不关心这些数据...使用 LAZY。
-
当使用二级缓存时,需要考虑的是某些实体通常会在缓存中,因此您无需访问数据库,即使使用连接也是如此。例如,如果你有大约 200 个国家实体,缓存它们并将相应的关联标记为惰性是有意义的。