大家好,威利在这里。 上次我告诉您,我正在使用
Neo4j和
Spring Data Neo4j构建
Skybase CMDB,我很高兴收到很多对此的积极反馈。 我展示了一些代码,但没有那么多。 在本文中,我将向您展示如何使用Spring Data Neo4j在Skybase中构建人员
配置项 (CI)。
人CI要求
我们将在这里简单地通过构建人员CI来开始。 出于各种原因而使人们进入CMDB很有用:它们使您可以定义细粒度的访问控制(例如,Jim可以将这样的应用程序部署到开发环境中; Eric可以将他想要的任何东西部署到他想要的任何地方;等等。 ); 它们使您可以定义将接收关键事件通知的组。 等等
我们的个人CI将有一个用户名,名字和姓氏,一些电话号码,一个电子邮件地址,一个经理,直接报告,最后是他或她工作的项目。 我们需要能够在列表视图中显示人员,在详细信息视图中显示给定人员,允许用户创建,编辑和删除人员等等。 例如,下面是列表视图的外观,至少现在是这样:
这是我们的详细信息视图的外观:
人与项目之间的关系具有关联的角色。 这种关系也是协作者列表的基础:如果至少有一个项目是他们两个成员,那么两个人就是协作者。
我们的简单要求应该足以显示编写Spring Data Neo4j代码的感觉。
创建人员和项目成员实体
首先,我们将创建人。 我已经取消了验证和JAXB批注,因为它们与我们当前的目的无关:
package org.skydingo.skybase.model;
import java.util.Set;
import org.neo4j.graphdb.Direction;
import org.skydingo.skybase.model.relationship.ProjectMembership;
import org.springframework.data.neo4j.annotation.*;
import org.springframework.data.neo4j.support.index.IndexType;
@NodeEntity
public class Person implements Comparable<Person> {
@GraphId private Long id;
@Indexed(indexType = IndexType.FULLTEXT, indexName = "searchByUsername")
private String username;
private String firstName, lastName, title, workPhone, mobilePhone, email;
@RelatedTo(type = "REPORTS_TO")
private Person manager;
@RelatedTo(type = "REPORTS_TO", direction = Direction.INCOMING)
private Set<Person> directReports;
@RelatedToVia(