fetch = FetchType.LAZY加@Fetch(FetchMode.JOIN),和fetch = FetchType.EAGER有什么区别?
例如:
@OneToMany(fetch =FetchType.LAZY)
@Fetch(FetchMode.JOIN)
和
@OneToMany(fetch=FetchType.EAGER)
有什么区别?分别在什么情形下使用?
fetch = FetchType.LAZY加@Fetch(FetchMode.JOIN),和fetch = FetchType.EAGER有什么区别?
例如:
@OneToMany(fetch =FetchType.LAZY)
@Fetch(FetchMode.JOIN)
和
@OneToMany(fetch=FetchType.EAGER)
有什么区别?分别在什么情形下使用?
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
FetchType.EAGER 是急加载。从数据库获取对象信息时,定义为急加载的属性会立马从数据库加载出来。
FetchType.LAZY 是懒加载。从数据库获取对象信息时,定义为懒加载的属性不会立马从数据库加载出来,而是在用到的时候再加载。
比如,有一个实体 Car,其中有 id、name 等属性,还关联着另一个实体 Engine。
如果 engine 字段用的是 FetchType.EAGER,那么 jpa 在加载 id、name 等属性的时候,会一起将 engine 加载出来。
如果 engine 字段用的是 FetchType.LAZY,那么 jpa 在加载 id、name 等属性时并不会一起将 engine 加载出来,而是等到用到的时候,如使用 new Car().getEngine() 时,才将 engine 从数据库中加载出来。
一般来说,如果一个实体属性不是需要被经常用到,用 FetchType.LAZY 即可;如果需要经常用到,就用 FetchType.EAGER。