Neo4j Spring动态起始节点类型实现

Neo4j Spring Data动态起始节点类型实现


在spring-boot里我们可以基于neo4j-spring-data,编写类似关系数据库风格的JPA操作,实现对neo4j数据的CURD。研究neo4j-spring-data底层API的实现发现,本质上还是将JPA的操作翻译为cypher的语句,并基于neo4j的bolt的协议将操作语句发送至远程的数据库服务器来执行,anyway,这块我们不进一步展开了,我们来看看怎么利用neo4j-spring-data的API高效地实现工程化模型。

neo4j-spring-data创建节点和关系

我们利用Neo4j建模的时候,经常会发现,同样的Relationship里,可能连接的节点是不一样的,比如OWN(拥有)这样的关系,比如:
用户拥有手机:User-[OWN]->Phone
用户拥有银行卡:User-[OWN]->Card

在neo4j-spring-data中,主要有2种形式来创建节点和节点之间的关系。

基于NodeEntity

这里我们简单举一个简单例子:User-[OWN]->Phone
1. 定义好@NodeEntity,任何被@NodeEntity的POJO将会被作为neo4j的一个节点类型处理;
2. 定义好对应的Repository
模型定义:

//所有关系标签常量
//这里使用了interface成员变量是常量的特性,比class使用static final String XX="xx"简洁 
public interface RelsType {
   
    String OWN  = "OWN";
    String HAVE = "HAVE";
}


@Data
@NodeEntity
public class User {
   
    @Id
    @GeneratedValue
    private Long id;

    private String name;

    /**
     * 一对多的关系
     */
    @Relationship(type = RelsType.OWN, direction = Relationship.OUTGOING)
    private List<Phone> phones;
}


@Data
@NodeEntity
public class Phone {
   
    @Id
    @GeneratedValue
    private Long id;

    private String phoneNo;

    /**
     * 一对多的关系
     */
    @Relationship(type = RelsType.OWN, direction = Relationship.INCOMING)
    private List<User> users;
}

定义好对应的Repository:

public interface UserRepository extends Neo4jRepository:<User, Long> {
   
}

注意:从4.2版本之后,API做了修改GraphRepository改为Neo4jRepository,参数也不一样,如果看到之前的博客的代码,请注意修改。
Base class for repositories GraphRepository has been renamed Neo4jRepository and parameter types change from <T> to<T, ID>

总结要点:

  • POJO中的属性将作为Node的properties
  • @Relationship注解指定与其他节点的关系,指定关系的direction方向,可以是一对一一对多(List<>)
  • @Id注解的id是对应Neo4j数据的<id>

测试代码:

@RunWith(SpringRunner.class)
@SpringBootTest
public class Neo4jSpringDataTest {
   

    
  • 13
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值