我正在努力地写这篇文章,所以我可能不得不举一个例子来帮助解释我所遇到的问题。
假设我们有三种类型的节点(这些节点可能有更多自己的关系,例如,产品系列、有产品经理):
- 产品
- 产品系列
- 电池
有了这些关系
- 一款产品可以在0个或多个系列中
- 一个产品可以有0个或更多电池。
在使用Spring-data-new 4j和保存新产品时,我希望包括这些关系,例如它们所需的电池和它们所属的产品系列。但是,如果我只提供一个ID,而不是一个完全填充的对象,它将相应地覆盖该对象以及属性和关系。
这并不是很好,因为这意味着每次我希望保存一些东西时,我都必须发送一个完全填充的对象,以及它的所有关系,其中一些关系可能会非常深入。
我的域名如下:
@Node
public class Product {
@Id
@GeneratedValue(generatorClass = SnowflakeGenerator.class)
private Long productId;
private String name;
@Relationship(type = "REQUIRES_BATTERY", direction = OUTGOING)
private List<Battery> batteryList;
@Relationship(type = "IN_FAMILY", direction = OUTGOING)
private List<ProductFamily> productFamilyList;
}
@Node
public class Battery {
@Id
@GeneratedValue(generatorClass = SnowflakeGenerator.class)
private Long batteryId;
private String name;
}
@Node
public class ProductFamily {
@Id
@GeneratedValue(generatorClass = SnowflakeGenerator.class)
private Long familyId;
private String name;
}
这很可能源于关系型数据库的思维方式,也是使用Neo4J的“局限性”。
TLDR使用Spring Data 在Neo4J中持久化某项内容时,如何仅保存关系,而不是整个相关节点。
1条答案
按热度按时间deyfvvtc1#
您可以使用Spring data Neo4j中的投影。(https://docs.spring.io/spring-data/neo4j/docs/current/reference/html/#projections)这为您提供了在对象树上放置“掩码”的选项,您想要持久化(以及应该保持不变)。
例如,在您的案例中: