JPA 仅使用其 id 引用现有实体来保存“新”实体?

2023-12-30

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

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

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

现在,如果您想添加新汽车并添加现有轮胎,您可以获取整个现有轮胎实体来填充汽车集。

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


您可以使用 id 来加载代理“副”对象,通过EntityManager.getReference https://docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html#getReference-java.lang.Class-java.lang.Object-。除非您访问对象的任何属性,否则它不会发出任何数据库查询。

如果您确实访问了属性,延迟加载机制将启动并加载实际对象。这以下问题 https://stackoverflow.com/questions/1607532/when-to-use-entitymanager-find-vs-entitymanager-getreference演示了代理对象的剖析。对于获得更好的图片很有用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JPA 仅使用其 id 引用现有实体来保存“新”实体? 的相关文章

随机推荐