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

lko*_*lko 9 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;
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

Mas*_*ave 12

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

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