为什么需要延迟加载
在某些情况下,我们在设计实体的时候,可能会将一些大字段设计到实体内部,比如一些超长的说明文字等。
以下时一个实体示例
@Getter
@Setter
@Entity(name = "user_")
public class User extends AbstractPersistable {
private String name;
@Lob
private String description;
}
name 是一个长度受限的字符串,descript是一个大字符串。
当前端页面需要一个列表,并且这个列表不需要展示descript时,我们通过设计数据传输对象,通过减少数据传输对象中的数据属性来规避服务器到客户端直接的网络流量。
但在使用JPA的时候,当我们获取某个对象时,总会向数据库服务器发送完整的sql语句,如果这个对象有Lob类型的字段,并且正巧里面存入了大量数据的话,就会导致发送大量的查询流量。但这些查询流量我们可能在某次请求中并不需要。
比如我们在某个地方调用了相应的Repository.findAll()方法,返回用户的列表。示例代码如下
@Test
public void loadOnlyName() {
List users = userRepository.findAll();
users.forEach(i -> {
System.out.println(i.getName());
});
<