为什么 JPA 对于 @ManyToOne 关系默认使用 FetchType EAGER

新手上路,请多包涵

I came to notice that the default FetchType for the @ManyToOne mapping is EAGER in JPA and Hibernate, whereas for the @OneToMany mapping, the默认 FetchTypeLAZY

这背后的具体原因是什么?

原文由 vatsal mevada 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 728
1 个回答

JPA 2.0 规范 中,默认值如下所示:

 OneToMany: LAZY
ManyToOne: EAGER
ManyToMany: LAZY
OneToOne: EAGER

休眠状态下,一切都是懒惰的

从休眠文档,

默认情况下,Hibernate 对集合使用延迟选择获取,对单值关联使用延迟代理获取。这些默认值对大多数应用程序中的大多数关联都有意义。

为了回答您的问题,Hibernate 是 JPA 标准的实现。 Hibernate 有它自己的操作怪癖,但根据 Hibernate 文档

By default, Hibernate uses lazy select fetching for collections and lazy proxy fetching for single-valued associations. These defaults make sense for most associations in the majority of applications.

所以 Hibernate 将始终使用延迟获取策略加载任何对象,无论您声明了哪种类型的关系。

JPA 规范 假设一般情况下,大多数应用程序将要求单例关系默认是急切的,而多值关系默认是惰性的。

参考 这里 了解更多

原文由 Ankur Singhal 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题