假设您有一辆装有轮胎的汽车。

@Entity
public class Car {
    private Long id;
    @OneToMany(mappedBy = "car")
    private Set<Tire> tires = new HashSet<>();
}

@Entity
public class Tire {
    private Long id;
    ...
}

现在,如果您要添加新的Car并添加现有的Tires,则可以获取整个现有的Tire Entities以填充Car's Set。

是否可以简单地拥有一些Tire ID并保存汽车而无需先将整个Tire实体先获取到内存中?如果只是一个Tire实例而不是Set实例,是否可以仅使用Tire Id保存它?使用JPA和Criteria API,或者使用JPQL。

最佳答案

您可以使用一个ID通过EntityManager.getReference加载代理“代理”对象。除非您访问对象的任何属性,否则它将不会发出任何数据库查询。

如果您确实访问属性,则延迟加载机制将启动并加载实际对象。 following question演示了代理对象的结构。有用以获得更好的图片

10-05 22:37
查看更多