深入实践Spring Boot2.4.2 节点和关系实体建模

简介:

2.4.2 节点和关系实体建模

虽然Neo4j没有表结构的概念,但它有节点和关系的概念。例如,现在有演员和电影两个实体,它们的关系表现为一个演员在一部电影中扮演一个角色。那么就可以创建演员和电影两个节点实体,和一个角色关系实体。它们的实体-关系模型如图2-5所示。这个实体-关系模型的定义比起关系型数据库的实体-关系模型的定义要简单得多,但是它更加形象和贴切地表现了实体之间的关系。更难能可贵的是,这个实体-关系模型是可以不经过任何转换而直接存入数据库的,也就是说,在Neo4j图数据库中保存的数据与图2-5所示的相同,它仍然是一张图。这对于业务人员和数据库设计人员来说,它的意义相同。所以使用Neo4j数据库,将在很大程度上减轻了设计工作和沟通成本。

像JPA使用了ORM一样,Neo4j使用了对象-图形映射(Object-Graph Mapping,OGM)的方式来建模。代码清单2-21是演员节点实体建模,使用注解@JsonIdentityInfo是防止查询数据时引发递归访问效应,注解@NodeEntity标志这个类是一个节点实体,注解@GraphId定义了节点的一个唯一性标识,它将在创建节点时由系统自动生成,所以它是不可缺少的。这个节点预定义了其他两个属性,name和born。节点的属性可以随需要增加或减少,这并不影响节点的使用。

代码清单2-21 演员节点实体建模

@JsonIdentityInfo(generator=JSOGGenerator.class)

@NodeEntity

public class Actor {

    @GraphId Long id;

    private String name;

    private int born;

 

    public Actor() { }

……

代码清单2-22是电影节点实体建模,注解@Relationship表示List<Role>是一个关系列表,其中type设定了关系的类型,direction设定这个关系的方向,Relationship.INCOMING表示以这个节点为终点。addRole定义了增加一个关系的方法。

代码清单2-22 电影节点实体建模

@JsonIdentityInfo(generator=JSOGGenerator.class)

@NodeEntity

public class Movie {

    @GraphId Long id;

    String title;

    String year;

    String tagline;

    @Relationship(type="ACTS_IN", direction = Relationship.INCOMING)

    List<Role> roles = new ArrayList<>();

 

    public Role addRole(Actor actor, String name){

        Role role = new Role(actor,this,name);

        this.roles.add(role);

        return role;

    }

 

    public Movie() { }

……

代码清单2-23是角色的关系实体建模,注解@RelationshipEntity表明这个类是一个关系实体,并用type指定了关系的类型,其中@StartNode指定起始节点的实体,

@EndNode指定终止节点的实体,这说明了图中一条有向边的起点和终点的定义。其中定义了一个创建关系的构造函数Role(Actor actor,Movie movie,String name),这里的name参数用来指定这个关系的属性。

代码清单2-23 角色关系实体建模

@JsonIdentityInfo(generator=JSOGGenerator.class)

@RelationshipEntity(type = "ACTS_IN")

public class Role {

    @GraphId

    Long id;

    String role;

    @StartNode

    Actor actor;

    @EndNode

    Movie movie;

 

    public Role() {

    }

 

    public Role(Actor actor, Movie movie, String name) {

        this.actor = actor;

        this.movie = movie;

        this.role = name;

    }

......

相关文章
|
2天前
|
Java 开发者 Spring
深入理解 Spring Boot 中的 @EnableAutoConfiguration 注解:概念与实践
【4月更文挑战第21天】在 Spring Boot 项目中,@EnableAutoConfiguration 注解是实现自动配置的核心,它可以根据项目的依赖和配置,自动地配置 Spring 应用程序中的 Bean
34 3
|
2天前
|
Java API 网络架构
深入理解 Spring Boot 中的 @RestController 注解:概念与实践
【4月更文挑战第20天】在现代Web开发中,创建RESTful服务已成为常态。Spring Boot通过提供@RestController注解,极大简化了REST API的开发过程。本篇博客旨在详细介绍@RestController的概念、优势以及在Spring Boot项目中的具体应用方法。
32 8
|
2天前
|
缓存 Java API
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
|
2天前
|
安全 Java 数据库
后端进阶之路——万字总结Spring Security与数据库集成实践(五)
后端进阶之路——万字总结Spring Security与数据库集成实践(五)
|
2天前
|
Java 数据库连接 Spring
从零开始,探索Spring框架的魅力与实践
从零开始,探索Spring框架的魅力与实践
|
2天前
|
缓存 NoSQL Java
Spring Cache 缓存原理与 Redis 实践
Spring Cache 缓存原理与 Redis 实践
210 0
|
2天前
|
Java
SpringBoot文件上传和自定义实体工具
SpringBoot文件上传和自定义实体工具
14 0
|
2天前
|
NoSQL Java MongoDB
【MongoDB 专栏】MongoDB 与 Spring Boot 的集成实践
【5月更文挑战第11天】本文介绍了如何将非关系型数据库MongoDB与Spring Boot框架集成,以实现高效灵活的数据管理。Spring Boot简化了Spring应用的构建和部署,MongoDB则以其对灵活数据结构的处理能力受到青睐。集成步骤包括:添加MongoDB依赖、配置连接信息、创建数据访问对象(DAO)以及进行数据操作。通过这种方式,开发者可以充分利用两者优势,应对各种数据需求。在实际应用中,结合微服务架构等技术,可以构建高性能、可扩展的系统。掌握MongoDB与Spring Boot集成对于提升开发效率和项目质量至关重要,未来有望在更多领域得到广泛应用。
【MongoDB 专栏】MongoDB 与 Spring Boot 的集成实践
|
2天前
|
前端开发 安全 Java
Spring Boot项目中VO层设计:选择继承或组合的灵活实践
Spring Boot项目中VO层设计:选择继承或组合的灵活实践
145 0
|
2天前
|
消息中间件 安全 Java
探索|Spring并行初始化加速的思路和实践
作者通过看过的两篇文章发现实现Spring初始化加速的思路和方案有很多类似之处,通过本文记录一下当时的思考和实践。