SND - 实体建立

 

实体主要有两个,一个是【节点实体】 一个是【关系实体】
 1.@NodeEntity
2.@RelationshipEntityhtml

1.节点实体java

package org.canaan.neo4j.graph.entity;

import lombok.Data;
import org.canaan.neo4j.graph.convert.MoneyConverter;
import org.neo4j.ogm.annotation.Id;
import org.neo4j.ogm.annotation.Labels;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Relationship;
import org.neo4j.ogm.annotation.typeconversion.Convert;
import org.neo4j.ogm.annotation.typeconversion.DateLong;

import java.util.Date;
import java.util.Set;

/**
 * {@link @NodeEntity}  label 不指定默认为 类名即: UserNode
 *
 * @author Canaan
 * @date 2019/7/11 8:52
 */
@Data
@NodeEntity(label = "User")
public class UserNode {

    public final static String LABEL_FOUNDER = "Founder";
    public final static String LABEL_PLOUGH  = "Plough";
    public final static String LABEL_SONUZ   = "Sonuz";

    /**
     * {@link @Id} 业务主键,惟一 可使用 {@link @GeneratedValue} 生成
     *
     * @author Canaan
     * @date 2019/7/11 12:47
     */
    @Id
    private Long userId;


    //@Required 须要企业级neo4j
    private String userName;


    @DateLong   //将日期类型转换为时间戳,或者用 @DateString 转换为String
    private Date createTime;

    @Convert(MoneyConverter.class)
    private Long fundValue;

    /**
     * 在 @NodeEntity  label 后追加 额外的标签
     *
     * @author Canaan
     * @date 2019/7/11 11:56
     */
    @Labels
    private Set<String> labels;

    /**
     * 关系的指定默认是   【-->】
     *
     * @author Canaan
     * @date 2019/7/11 14:31
     */
    @Relationship(type = "SUPERIOR")
    private UserNode parentNode;


    //@PostLoad
    //public void loadData() {
    //当数据加载完成后,将调用该方法
    //    System.out.println("数据加载了");
    //}


}

自定义类型转换器: node

package org.canaan.neo4j.graph.convert;

import org.neo4j.ogm.typeconversion.AttributeConverter;

/**
 * @author Canaan
 * @date 2019/7/11 19:06
 */
public class MoneyConverter implements AttributeConverter<String, Integer> {

    @Override
    public Integer toGraphProperty(String value) {
        return Integer.valueOf(value);
    }

    @Override
    public String toEntityAttribute(Integer value) {
        return value.toString();
    }


}

实体的主要注解在:   org.neo4j.ogm.annotation 包下
字段类型转换器注解在:  org.neo4j.ogm.annotation.typeconversion 包下spring

注意:ide

1. 若是字段名为 【id】 面没有注解说明,那么默认返回的是 GraphId
2. NodeEntity type 的默认值为 类名 。
3.@Id 是业务上的,不是由neo4j 生成 

 ui

文档:this

https://docs.spring.io/spring-data/neo4j/docs/5.1.3.RELEASE/reference/html/#reference:annotating-entities:node-entityspa

实体Id 说明:
https://docs.spring.io/spring-data/neo4j/docs/5.1.3.RELEASE/reference/html/#reference:annotating-entities:graph-id.net

 

 2. 关系实体, 主要用于复杂的关系映射code

package org.canaan.neo4j.graph.entity;

import lombok.Data;
import org.neo4j.ogm.annotation.*;

/**
 * 用户隶属关系
 *
 * @author Canaan
 * @date 2019/7/11 10:10
 */
@Data
@RelationshipEntity(type = Membership.TYPE)
public class Membership {

    public final static String TYPE = "MEMBERSHIP";

    @Id
    @GeneratedValue
    private Long relationshipId;

    @StartNode
    private UserNode startNode;

    @EndNode
    private UserNode endNode;

    public Membership() {
    }

    public Membership(UserNode startNode, UserNode endNode) {
        this.startNode = startNode;
        this.endNode = endNode;
    }
}

 

注意若是关系映射不正确,是没法级联查询其关系节点的

 

文档:

https://docs.spring.io/spring-data/neo4j/docs/5.1.3.RELEASE/reference/html/#reference:annotating-entities:relationship-entity

相关文章
相关标签/搜索