27 延迟加载和即时加载

问题1:我们查询客户时,要不要把联系人查询出来?

分析:如果我们不查的话,在用的时候还要自己写代码,调用方法去查询。如果我们查出来的,不使用时又会白白的浪费了服务器内存。

解决:采用延迟加载的思想。通过配置的方式来设定当我们在需要使用时,发起真正的查询。

/**
     * 在客户对象的@OneToMany注解中添加fetch属性
     *         FetchType.EAGER    :立即加载
     *         FetchType.LAZY    :延迟加载
     */
    @OneToMany(mappedBy="customer",fetch=FetchType.LAZY)
    private Set<LinkMan> linkMans = new HashSet<>(0);

问题2:我们查询联系人时,要不要把客户查询出来?

分析:例如:查询联系人详情时,肯定会看看该联系人的所属客户。如果我们不查的话,在用的时候还要自己写代码,调用方法去查询。如果我们查出来的话,一个对象不会消耗太多的内存。而且多数情况下我们都是要使用的。

解决: 采用立即加载的思想。通过配置的方式来设定,只要查询从表实体,就把主表实体对象同时查出来

/**
     * 在联系人对象的@ManyToOne注解中添加fetch属性
     *         FetchType.EAGER    :立即加载
     *         FetchType.LAZY    :延迟加载
     */
    @ManyToOne(targetEntity=Customer.class,fetch=FetchType.EAGER)
    @JoinColumn(name="cust_id",referencedColumnName="cust_id")
    private Customer customer;

 

 

 

上一篇:react 懒加载和错误边界


下一篇:Scala 函数入门之过程、lazy值和异常