Spring Data Neo4J首次保存关联节点:是否支持级联保存?
使用Spring Data Neo4J批量保存关联节点的疑问
我正在使用Spring Data操作Neo4J,存在多个互相关联的节点,需要首次保存这些节点。请问是否需要先分别保存每个节点,再更新关联关系并重新保存?还是存在方式可让Neo4J一次性保存所有节点?示例如下:我有一个名为Car的节点,包含一组名为Wheel的节点。
@Node public class Car { public String name; @Relationship(type="HAS_WHEEL") public List<Wheel> wheels; } @Node public class Wheel{ public String name; @Relationship(type="HAS_CAR") public Car car; }
在此场景下,是否需要先保存Car和Wheel节点,再用保存后返回的节点更新关联关系?还是只需填充好Wheels的Car对象并告知Neo4J进行级联保存即可?
不需要分步保存,Spring Data Neo4J支持级联保存,直接一次性搞定所有节点和关联关系。
具体操作很简单:
- 先构建好
Car对象,填充它的属性以及关联的Wheel列表 - 给每个
Wheel对象设置对应的Car引用(完成双向关联的赋值) - 直接调用
CarRepository的save()方法,Spring Data Neo4J会自动完成以下操作:- 持久化
Car节点 - 持久化所有关联的
Wheel节点 - 创建
Car与Wheel之间的HAS_WHEEL关系,以及Wheel与Car之间的HAS_CAR关系
- 持久化
举个代码示例:
// 创建四个Wheel实例 Wheel frontLeft = new Wheel(); frontLeft.name = "前轮左"; Wheel frontRight = new Wheel(); frontRight.name = "前轮右"; Wheel rearLeft = new Wheel(); rearLeft.name = "后轮左"; Wheel rearRight = new Wheel(); rearRight.name = "后轮右"; // 创建Car实例并关联Wheels Car myCar = new Car(); myCar.name = "我的座驾"; myCar.wheels = Arrays.asList(frontLeft, frontRight, rearLeft, rearRight); // 给每个Wheel绑定对应的Car frontLeft.car = myCar; frontRight.car = myCar; rearLeft.car = myCar; rearRight.car = myCar; // 直接保存Car,所有关联节点和关系都会自动创建 carRepository.save(myCar);
需要注意的是:双向关联场景下,如果后续需要将实体转为JSON返回,可能会出现循环序列化问题,这时候可以给其中一方的关联字段添加@JsonIgnore注解来避免,但这属于序列化层面的问题,不影响节点的保存操作。
内容的提问来源于stack exchange,提问作者Daniel Sobrado
相关产品推荐
相关产品推荐

