如何使用@RelationshipProperties与@TargetNode实现Spring Data Neo4j关系实体
Spring Data Neo4j 6+ 关系实体升级实现方案
SDN 6及以上版本已废弃原有的@RelationshipEntity注解,改用@RelationshipProperties标注带属性的关系类,搭配@TargetNode指定关系指向的目标节点,具体升级代码如下:
1. 关系属性类实现
import org.springframework.data.neo4j.core.schema.RelationshipId; import org.springframework.data.neo4j.core.schema.RelationshipProperties; import org.springframework.data.neo4j.core.schema.TargetNode; @RelationshipProperties public class RelationshipValue { @RelationshipId private Long graphId; // 对应原@EndNode标注的目标节点 @TargetNode private Characteristic characteristic; // 若关系本身有其他自定义属性(如权重、创建时间等),可直接在此类中添加对应字段 }
2. 起始节点类关联配置
原@StartNode标注的起始节点不需要定义在关系属性类中,需要移到起始节点实体的关系关联字段处,示例如下:
import org.springframework.data.neo4j.core.schema.Id; import org.springframework.data.neo4j.core.schema.Node; import org.springframework.data.neo4j.core.schema.Relationship; import java.util.List; @Node public class Decision { @Id private Long id; // 其他节点属性省略 // 指定关系类型、方向,关联上面定义的关系属性类 @Relationship(type = "HAS_VALUE_ON", direction = Relationship.Direction.OUTGOING) private List<RelationshipValue> characteristicValues; }
注意事项
- 原
@GeneratedValue注解无需再添加,SDN会自动处理关系ID的生成逻辑,仅需用@RelationshipId标注主键字段 - 如果需要双向关联,可在
Characteristic节点类中定义入方向的关系字段,指定direction = Relationship.Direction.INCOMING即可 - 所有节点实体(Decision、Characteristic)都需要添加
@Node注解完成标注
内容的提问来源于stack exchange,提问作者alexanoid
相关产品推荐
相关产品推荐

