JPA规范明确
嵌入对象不能独立于其父对象进行查询、持久化和合并。它们是严格私有的(依赖的)对象
应谨慎使用,因为其生存期受所属实体实例的生存期限制。因此,如果您持久化/合并/删除您拥有的实体实例,则其所有可嵌入实例都将被持久化/合并/删除
假设你做了类似的事情
/**
* Let's suppose owning contains SIX embeddables instances
*/
Owning owning = manager.find(Owining.class, owningId);
因此,您只需在视图图层上修改您的所属实体并提交更改。通过使用检索您的所属实体
/**
* Usually your web framework Takes care of binding your submitted data
*/
Owning owning = new Owning();
owning.setProperty(request.getParameter("property"));
然后,您可以合并提交的数据,并且您认为您的嵌入式实例尚未存储在数据库中。好吧,让我们看看
如上所示,您(或您的Web框架)刚刚检索了拥有属性,???所以你的owning.getElementList()是空的。因为owning.getElementList()是空的,所以JPA将删除其所有可嵌入的实例。请记住这一点。
通常,可嵌入类与其所属实体以外的其他类没有关系。当使用一组可嵌入对象时,JPA总是在保存/更新之前选择,因为它需要使用其等于方法逐个比较。因此,在使用 Set 集合时,需要一个一致的 equals 实现。
在这里,您可以在Hibernate中看到它的对应物。