JPA的lazy使用案例
时间: 2023-07-11 20:12:36 浏览: 159
JPA的一个例子
JPA中的Lazy是指延迟加载,即在不需要使用某个实体对象的关联属性时,不去立即加载这个属性,而是在需要使用时再进行加载。这样可以减少数据库的查询次数,提高程序的性能。
下面是一个使用JPA的lazy的示例代码:
假设有两个实体类:Order和Customer,它们之间是一对多的关系,即一个顾客可以有多个订单:
```
@Entity
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "customer", fetch = FetchType.LAZY)
private List<Order> orders = new ArrayList<>();
}
@Entity
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String orderNumber;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "customer_id")
private Customer customer;
}
```
在Customer实体类中,通过@OneToMany注解来定义与Order实体类的一对多关系,fetch属性设置为LAZY,表示在使用orders属性时才会去加载它。
在Order实体类中,通过@ManyToOne注解来定义与Customer实体类的多对一关系,fetch属性设置为LAZY,表示在使用customer属性时才会去加载它。
这样,当我们查询一个顾客的信息时,它的订单信息并不会被立即加载,只有在我们使用orders属性时才会去查询订单信息。这样可以避免不必要的查询,提高程序性能。
示例代码中的fetch属性还有另外一个值:EAGER,表示立即加载。如果将fetch属性设置为EAGER,则在查询顾客信息时,它的订单信息会立即被加载。但是,如果订单信息非常多,这样做会导致查询变慢,影响程序性能。因此,在实际开发中,建议使用LAZY方式进行延迟加载。
阅读全文