Spring Data Neo4j中save()方法的保存范围是什么?
save()方法具体保存内容说明
save()的保存范围并非固定,核心由实体关联关系的级联(cascade)配置决定,以JPA/Hibernate这类主流ORM框架为例,对应你的疑问逐一说明:
仅保存实体本身?
当实体的所有关联关系都用默认配置(cascade=CascadeType.NONE)时,save()只会处理当前实体的保存,不会触碰任何关联对象或关联关系记录。保存实体及其关联关系?
如果关联关系配置了cascade=CascadeType.PERSIST(对应save操作)或CascadeType.ALL,save()会保存当前实体,同时写入当前实体与已持久化关联对象之间的关系记录——但关联对象得是已经存在于数据库中的状态,临时对象不会被保存。是否会保存关联关系以及关系另一端的对象?
当关联关系配置了cascade=CascadeType.PERSIST/MERGE/ALL,且关联对象是新创建的临时状态(未被持久化)时,save()会同时完成三件事:保存当前实体、写入关联关系记录、保存关联另一端的对象。比如一对多场景中,保存父实体时,若子实体是新的且开了级联,子实体也会被同步保存。还是会递归保存实体包含的所有内容,将其作为锚点节点?
只有当所有嵌套层级的关联关系都配置了对应的级联保存规则时,才会递归保存所有关联对象。如果某一层关联没开级联,递归到这一层就会停止,不会继续处理更深的对象。默认不会自动递归保存所有内容,必须显式配置级联才会触发。
内容的提问来源于stack exchange,提问作者Kristóf Göncző
相关产品推荐
相关产品推荐

