JPA使用它的id来保存“new”实体并参考现有实体?

时间:2015-03-19 19:08:44

标签: java hibernate jpa

假设您有一辆带有轮胎系列的汽车。

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

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

现在,如果您想添加新车并添加现有轮胎,您可以获取整个现有轮胎实体以填充Car's Set。

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

1 个答案:

答案 0 :(得分:10)

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

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