猿问
下载APP

Java持久化API中FetchType懒惰和渴望的区别?

Java持久化API中FetchType懒惰和渴望的区别?

我是Java持久性API和Hibernate的新手。

.之间的区别是什么?FetchType.LAZYFetchType.EAGER在Java持久性API中?


饮歌长啸
浏览 93回答 3
3回答

牛魔王的故事

有时候你有两个实体,它们之间有关系。例如,您可能有一个名为“大学”的实体和另一个名为“学生”的实体。大学实体可能具有一些基本属性,如id、姓名、地址等,以及一个名为“学生”的属性:public&nbsp;class&nbsp;University&nbsp;{ &nbsp;private&nbsp;String&nbsp;id; &nbsp;private&nbsp;String&nbsp;name; &nbsp;private&nbsp;String&nbsp;address; &nbsp;private&nbsp;List<Student>&nbsp;students; &nbsp;//&nbsp;setters&nbsp;and&nbsp;getters}现在,当您从数据库加载一个大学时,JPA将为您加载它的id、name和Address字段。但是您有两个选项供学生选择:在调用大学的getStudents()方法时,将其与其他字段一起加载(即热切地加载)或按需加载(即懒散地)。当一所大学有很多学生时,当他们不需要的时候,让所有的学生都加入是不有效的。因此,在类似的情况下,您可以声明希望学生在实际需要时被加载。这叫做延迟加载。

紫衣仙女

基本上,LAZY&nbsp;=&nbsp;fetch&nbsp;when&nbsp;needed EAGER&nbsp;=&nbsp;fetch&nbsp;immediately

慕函数4003404

EAGER加载集合意味着在获取其父集合时完全获取它们。所以如果你有Course而且它已经List<Student>,所有的学生都被抓走了从数据库在当时Course被取走了。LAZY另一方面,意味着List只有当您尝试访问它们时才会获取它们。例如,通过调用course.getStudents().iterator()..上的任何访问方法。List将启动对数据库的调用以检索元素。通过在List(或Set)。因此,对于惰性集合,具体类型不是ArrayList和HashSet,但是PersistentSet和PersistentList(或PersistentBag)
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答