我是 JPA 的新手,我正在尝试使用实体图。 我意识到当我检索数据时,我需要指定我要使用的 EntityGraphType。
我阅读了 JPA2.1 规范,但我仍然不确定如何正确使用这两个选项...
问题是……
- 如果我没有任何具体要求,我应该使用哪个选项?
- 需要使用 Fetch 和 Load 的具体情况是什么?
最佳答案
我将首先回答你问题的第二部分。
what is the specific situation when I need to use Fetch and Load?
在 JPA 中加载实体有两种主要方式,eager 加载和 lazy 加载。在急切加载中,实体在其父实体加载时立即加载。在延迟加载中,只有在调用实体的实际 getter 时才会加载实体。高性能应用程序倾向于延迟加载,因为让最终用户等待整个表甚至一组表在应用程序启动时加载并不是很好。现在回答你的第二个问题。
您通过在包含实体的文件中导入 javax.persistence.fetchgraph
来指定 FETCH
作为您的策略。在这种情况下,您的实体图中指定的所有属性都将被视为FetchType.EAGER
,而所有未指定的属性将被视为FetchType.LAZY
。另一方面,如果您通过导入 javax.persistence.loadgraph
将 LOAD
指定为策略,那么实体图中指定的所有属性也是 FetchType.EAGER
但如果实体未指定任何内容,则未指定的属性使用其指定的类型或默认值。
which option should I use if I don't have any specific reqirement?
话虽如此,您不太可能没有特定要求。至少,您需要让您的 Web 应用程序快速运行。出于这个原因,您可能应该默认使用延迟加载。使用 FETCH
图是一个不错的选择,因为在您认为应该急切加载属性的少数特殊情况下,它默认为延迟加载 except。
关于java - JPA的实体图的FETCH和LOAD有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31978011/